'use strict' 是在一個(gè)嚴(yán)格的模式下
- 在正常模式中纱烘,如果一個(gè)變量沒(méi)有聲明就賦值雳灵,默認(rèn)是全局變量类嗤。嚴(yán)格模式禁止這種用法糊肠,全局變量必須顯式聲明。
- 靜態(tài)綁定, 屬性和方法到底歸屬哪個(gè)對(duì)象遗锣,在編譯階段就確定货裹。
- 禁止使用with語(yǔ)句
- 正常模式下,Javascript語(yǔ)言有兩種變量作用域(scope):全局作用域和函數(shù)作用域精偿。嚴(yán)格模式創(chuàng)設(shè)了第三種作用域:eval作用域泪酱。
"use strict"; var x = 2; console.info(eval("var x = 5; x")); // 5 console.info(x); // 2
- 構(gòu)造函數(shù)只要不通過(guò)new實(shí)例化對(duì)象, 那么就會(huì)直接報(bào)錯(cuò), 因?yàn)閡ndefined無(wú)法設(shè)置屬性
var Cat = function(name) {
this.name = name;
this.say = function() {
console.log(this.name)
}
}
// Cat("yutao"); 非嚴(yán)格模式下, 屬性添加到了window對(duì)象上
// Cat("yutao"); 嚴(yán)格模式下, this指向undefined, 所以無(wú)法添加屬性, 會(huì)報(bào)錯(cuò)
3. 不允許寫八進(jìn)制的數(shù)據(jù) var a = 010;
4. jquery不推薦使用 兼容性問(wèn)題, IE低版本不支持 .NET跟蹤出問(wèn)題, Firefox老版本假死 (18+)
5. 調(diào)用形式: 針對(duì)單個(gè)script標(biāo)簽, 針對(duì)單個(gè)函數(shù)
6. 安全性措施
+ 禁止this關(guān)鍵字指向全局對(duì)象
```js
'use strict';
var fn = function() {
console.log(this) //禁止指向window對(duì)象
}
fn(); // 打印出來(lái)的是 undefined
```
+ 禁止在函數(shù)內(nèi)部遍歷調(diào)用棧 fn.caller, fn.arguments 將報(bào)錯(cuò)
```js
'use strict';
var fn = function() {
console.log(fn.arguments.length) // 嚴(yán)格模式下, 不可用
}
```
+ 禁止刪除變量var x; delete x; // 語(yǔ)法錯(cuò)誤
```js
'use strict';
var x = 3;
delete x; // 語(yǔ)法錯(cuò)誤
console.log(x)
'use strict';
var obj = {};
obj.y = 1;
delete obj.y
console.log(obj) // 非嚴(yán)格模式下{}, 嚴(yán)格模式下{}
// 嚴(yán)格模式下, 對(duì)禁止擴(kuò)展的對(duì)象添加新屬性, 會(huì)報(bào)錯(cuò)
Object.preventExtensions(o) //非嚴(yán)格模式下, 不會(huì)報(bào)錯(cuò), 擴(kuò)展屬性無(wú)效
```
+ 顯式報(bào)錯(cuò) 正常模式下,對(duì)一個(gè)對(duì)象的只讀屬性進(jìn)行賦值,不會(huì)報(bào)錯(cuò)墓阀,只會(huì)默默地失敗毡惜。嚴(yán)格模式下,將報(bào)錯(cuò)斯撮。
普通模式下, 如果函數(shù)有多個(gè)重名參數(shù)(解決辦法是通過(guò)arguments[i]進(jìn)行調(diào)用)
7. 重名錯(cuò)誤, 變量和函數(shù)都不能重名
8. arguments 不允許對(duì)arguments進(jìn)行賦值 不在追蹤參數(shù)的變化, 禁止使用arguments,callee()
```js
function f(a) {
a = 2;
return [a, arguments[0]];
}
f(1); // 正常模式為[2,2]
function f(a) {
"use strict";
a = 2;
return [a, arguments[0]];
}
f(1); // 嚴(yán)格模式為[2,1]
- 函數(shù)聲明必須在頂層
嚴(yán)格模式只允許在全局作用域或函數(shù)作用域的頂層聲明函數(shù)经伙。也就是說(shuō),不允許在非函數(shù)的代碼塊內(nèi)聲明函數(shù)勿锅。 - 增加保留字 (嚴(yán)格模式下使用關(guān)鍵字會(huì)報(bào)錯(cuò))