1,简单的理解严格模式:
使用严格模式比较简单,直接在代码的最顶端或者函数体的最顶端写上'use strict';如果是在代码的最顶端(全局环境下),那么严格模式将作用于整个全局环境下;若是某个函数体的最顶端,则作用于该函数体内;如若不是在最顶端,就算在某个位置有写上'use strict';也会不起作用。可以只是某个JS文件使用严格模式,也可只是某个函使用严格模式,可能这就是所谓严格模式的渐进式转变吧。使用严格模式的代码其实更容易让开发者接受,且一定程度上提高了性能。
//1, 放在全局环境的最顶端,受影响的是整个全局下的代码-----------
'use strict';
specialVariable ='test'; //使用未定义变量,在严格模式下会报错
//ReferenceError: specialVariable is not defined
function fn(){
console.log(this.a); //严格模式下,直接被调用的函数的this指向undefined
}
fn();
//TypeError: Cannot read property 'a' of undefined
//2, 放在函数体的最顶端 -------------
specialVariable ='test'; //strict mode 放在函数体内,受影响的是函数体内的代码
function fn(){
'use strict';
nonFn();
console.log(this.test);
// innerFn();
// function innerFn(){
// console.log(this.test); //该函数内的代码也一定受影响
// }
}
function nonFn(){
console.log(this.test); //虽然在fn中调用此函数,但它不受严格模式的影响,this指向window
}
fn();
//输出:
//undefined
//TypeError: Cannot read property 'test' of undefined
//3, 'use strict'没放在代码最顶端,而是这样的放置,--------------
//不管是变量 specialVariableB 还是 specialVariable 都不受严格模式的影响
specialVariableB = 'test too';
'use strict';
specialVariable ='test';
//以上两个变量被正常定义以及赋值
//4,在函数体内也一样,若没放在代码最顶端,也会像例3那样不受严格模式的影响----------------
function fn(){
console.log(this.test);
'use strict';
console.log(this.test);
}
fn();
//undefined
//undefined
//以上正常执行,非严格模式下,this指向window。
//因此不能耍酷,要把'use strict'放在代码最顶端-----------
2,参考文档,想知道更多有关严格模式的信息或者严格模式做了哪些,可以阅读以下链接。