JS严格模式主要有以下几种使用场景:
1、this指向问题。
在严格模式中,函数内部的this
不能指向全局对象,默认等于 undefined。这给我们提供了一种调用构造函数时忘记加new命令的问题的解决方法。示例:
function Constr(a, b){
'use strict';//启用严格模式,此处也可用双引号"use strict";
this._a = a;
this._b = b;
}
Constr();//直接调用构造函数而不加new命令
// TypeError: Cannot set property '_a' of undefined
调用构造函数Fubar时,忘了加new命令,如果不用严格模式,会导致函数内部对this的操作直接变成了对全局对象window的操作,即上述代码中的_a和_b会成为全局变量,造成内存泄漏。启用严格模式后就会报错提示,避免不必要的错误。
2、函数anguments对象的修改问题。
严格模式下,arguments
对象与函数参数不具有联动关系。也就是说,修改arguments
对象不会影响到实际的函数参数。示例:
var f = function(a, b) {
'use strict'; // 开启严格模式
arguments[0] = 3;
arguments[1] = 2;
return a + b;
}
f(1, 1) // 2
然而正常模式下,arguments
对象可以在运行时修改。示例:
var f = function(a, b) {
arguments[0] = 3;
arguments[1] = 2;
return a + b;
}
f(1, 1) // 5
暂时总结到这里,后面还会继续总结更多使用情况。
原创博客,禁止非法抄袭和复制,转载请注明出处。