国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Strict Mode和Extended Mode - Javascript語法基礎 - Javas

SHERlocked93 / 2311人閱讀

摘要:之后,在瀏覽器大戰中,成為各方角逐的主要戰場。各大廠商各顯神通,其副作用是各種奇奇怪怪的行為和各式不一的。也就是說,有很多模棱兩可,或是錯誤卻被允許的操作,被徹底禁止了。目前支持嚴格模式的支持范圍從起跳,其他常青瀏覽器也都是支持的。

  

原文: http://pij.robinqu.me/JavaScript_Core/JavaScript_Basics/Strict_Mode.html

  

源代碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScript_Core/JavaScript_Basics/Strict_Mode.md

本文需要補充更多例子

本文存在批注,但該網站的Markdown編輯器不支持,所以無法正常展示,請到原文參考。

Strict Mode和Extended Mode
  

本文上一個版本盜用了別人的文章,經讀者指出后我就刪掉了。由于起草的時間在去年,我也不太清楚當初是怎么把別人的文章復制進來的。本文除了介紹所謂的Strict Mode之外,還會介紹其他關聯內容。

JavaScript并不是一個完美的語言。事實上,第一個版本的Brendan Eich1花費十天的時間創造的,你不能對它期望太多。之后,JavaScript在瀏覽器大戰中,成為各方角逐的主要戰場。各大廠商各顯神通,其副作用是各種奇奇怪怪的行為和各式不一的API。在之后,W3C和其他社區團體花費了大量的精力來通過標準化來“凈化”所有Web開發相關的技術標準。

但尷尬的是,瀏覽器廠商并不是那么完全的實現了W3C和ECMAScript的各種標準。最后,經驗豐富的Javascript程序員,通過約束自身對Javascript的使用方法,來達到讓Javascript更高的可擁度??赡艽蟛糠秩硕甲x過《JavaScript語言精粹》2這本書,其講述的就是如何在JavaScript語言中,取其精華,然后去其糟粕。

而JavaScript的嚴格模式,則是另一種緊箍咒,它的約束力來自運行時本身,而不是用戶的主觀行為。也就是說,有很多模棱兩可,或是錯誤卻被允許的操作,被徹底禁止了。目前支持嚴格模式的支持范圍3從IE10起跳,其他常青瀏覽器也都是支持的。

如何開啟

開啟全局模式只需在所有語句之前放置"use strict"字符串常量。

全局開啟嚴格模式:

"use strict"
var v = "Hello world";

但注意,這樣會導致整個腳本內的代碼都在嚴格模式中執行。假如之前有些代碼并沒有考慮嚴格模式,這可能讓你的整個應用程序突然失效。

我們更為推薦的是,在某個函數內開啟嚴格模式:

function mySuperMethod() {
    "use strict";
    var v = "Hello world";
}

function mySuckingMethod {
    //not in strict mode
}
嚴格模式的具體行為

大家有需要記住一堆語言特性了。但是,還好這些內容是把“歪”的掰“直”了。有少數代碼例子來自于MDC4。

拋出ReferenceError

試圖隱式創建全局變量

```
"use strict"
hello = "world"http://throw
```

拋出TypeError

試圖修改已經被定義為不可寫的屬性

```
"use strict";
var o = {};
Object.defineProperty(o, "hello", {value:"world", wrtiable:false});
o.hello = "bad boy";//throw
```

其他類似的還有:

給只讀屬性賦值

給不可擴展的對象新建屬性

試圖刪除不可刪除的屬性

```
"use strict";
delete Object.prototype; //throw
```

arguments.callee不能被返回、刪除、修改;

```
"use strict";
var fun = function() { 
    return arugments.callee;//throw
};
```

拋出SyntaxError

重復定義屬性名

```
"use strict";
var o = {hello: 1, hello: 2};//throw
```

禁用八進制字面量

```
"use strict";
var hello = 015;//throw
```

不允許重復參數名

```
function myMethod(a, b, b) {//throw
    "use strict";
}
```

不能使用with

```
"use strict";
var obj = {};
with (obj) {};//throw
```

不允許對evalarguments賦值

```
var fun = function(){
    "use strict";
    eval=16
}();
```

不可將evalarguments作為參數名、變量名

```
var fun = function(){
    "use strict"; 
    var obj = { 
        set p(arguments) {} 
    };
}();
```

eval被限制在臨時的本地作用域

eval不再有權限直接修改其所在作用于,而只能影響自身創建的作用域。

var hello = "world";
var evalHello = eval(""use strict"; var hello = "girl"; hello");
// hello === "world"
// evalHello === "girl"
arguments不再追蹤實際參數值變化
function f(hello)
{
  "use strict";
  hello = "girl";
  return [hello, arguments[0]];
}
var pair = f("world");
// pair[0] === "girl"
// pair[1] === "world";
函數的動態綁定后的this不做任何修改

即使指定nullundefined,引擎也不會重新指定全局對象作為this

指定基礎數據類型時,也不會用包裝類進行轉換

"use strict";
function fun() { return this; }
// fun() === undefined
// fun.call(2) === 2
// fun.apply(null) === null
// fun.call(undefined) === undefined
// fun.bind(true)() === true
調用堆棧不可被追蹤

以往,我們可以通過函數的callerarguments來投影整個調用堆棧。但是,在嚴格模式中我們做不到。

function restricted()
{
  "use strict";
  restricted.caller;    // throws a TypeError
  restricted.arguments; // throws a TypeError
}
ECMAScript6的相關特性 更多保留字
implements, interface, let, package, private, protected, public, static, yield
僅允許在開頭使用function語句

很多開發者喜歡如下代碼風格,這在嚴格模式中會報錯。

function foo()
{
  "use strict";
  return g;
  function g() { }//throw SyntaxError
}

這個改變的原因是,JavaScript的Hoisting特性會讓很多人迷惑:

function g() { }
function foo()
{
    if (true)
    function g() { }
    return g;
}
Extended Mode

ES6 Draft中引入了一個新的概念5,叫Extend Mode,然后又被撤銷了6。但不幸的是,V8中已經支持了這個新模式。所以,作為事實標準,目前依賴V8的所有Javascript運行環境都有如下三個模式:

Classic Mode,或者Non-strict mode

Strict Mode

Extended Mode

這個模式是備受爭議的。這個模式的產生,也體會出制作一個標準的困難之處——你總要考慮新標準對老標準的兼容,尤其是Web技術。

有稍微了解ES6的同學都應該清楚,module、class這些東西已經完全顛覆了傳統JavaScript的很多嘗試。但也有不少東西,開發者是可以接受,并立馬去嘗試的。于是乎,關于如何讓代碼部分進入extended mode也就成了最初討論的重點7。

實際表現上,node的0.11.x的版本,有些特性,僅僅使用--harmony并不能完全使用,還需加上--use_strict。在這里,已經可以看出V8團隊有多糾結了8。他們也沒有想清楚,該如何進入extended mode,索性,也叫strict吧。

目前僅在extended mode下可用的ES6特性:

let

blockl-level function declaration

關于ES6的特性,請參考本書的相關章節。

http://en.wikipedia.org/wiki/Brendan_Eich??

http://book.douban.com/subject/3590768/??

http://caniuse.com/#feat=use-strict??

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Strict_mode??

http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts??

http://wiki.ecmascript.org/lib/exe/fetch.php?id=harmony%3Aspecification_drafts&cache=cache&media=harmony:working_draft_ecma-262_edition_6_11-7-11.pdf??

https://lists.webkit.org/pipermail/webkit-dev/2011-December/018903.html??

https://code.google.com/p/v8/source/detail?r=10062??

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78152.html

相關文章

  • Strict Mode - Javascript語法基礎 - Javascript核心

    原文: http://pij.robinqu.me/Javascript_Core/Javascript_Basics/Strict_Mode.html 源代碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/Javascript_Core/Javascript_Basics/Strict...

    jzzlee 評論0 收藏0
  • ES6語法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三個是為了解決變量聲明定義的問題,而最后一個則影響最大。下文只介紹前三個特性。這是因為的的不支持塊級作用域,變量僅僅被限制到函數作用域內。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...

    Joyven 評論0 收藏0
  • ES6語法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三個是為了解決變量聲明定義的問題,而最后一個則影響最大。下文只介紹前三個特性。這是因為的的不支持塊級作用域,變量僅僅被限制到函數作用域內。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...

    StonePanda 評論0 收藏0
  • ES6語法特性 - ES6 - ECMAScript特性 - Javascript核心

    摘要:前三個是為了解決變量聲明定義的問題,而最后一個則影響最大。下文只介紹前三個特性。這是因為的的不支持塊級作用域,變量僅僅被限制到函數作用域內。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_syntax_features.html 源代碼: https://github.com/RobinQu/P...

    jas0n 評論0 收藏0
  • JavaScript中的嚴格模式

    摘要:字符串不能用作標識符變量或函數名參數名等在嚴格模式下,函數聲明無法嵌套在語句或塊中。嚴格模式下用法無效如果在函數內聲明變量,則不能在此函數外部使用該變量。在嚴格模式下,更改的值不會影響的值,因為對象只是一個本地副本。 本文同步自 我的博客,地址:http://reeoo.me/archives/strictmode.html 什么是嚴格模式 我們平時寫的JavaScript代碼一般都運...

    wwolf 評論0 收藏0

發表評論

0條評論

SHERlocked93

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<