为什么第二个功能没有使用“use strict”; 模式(它在控制台中显示我的窗口对象):
function test() {
console.log(this);
}
test(); // will be global or window, it's okay
"use strict";
function test2() {
console.log(this);
}
test2(); // will be global, BUT WHY? It must be undefined, because I have used strict mode!
但如果我在第二个函数的正文中定义严格模式,那么一切都会如我所料。
function test() {
console.log(this);
}
test(); // will be global or window
function test2() {
"use strict";
console.log(this);
}
test2();
我的问题很简单 - 为什么会这样?
答案 0 :(得分:3)
要为整个脚本调用严格模式,请输入确切的语句“use strict”; (或'使用严格';)在任何其他陈述之前。
和
同样,要为函数调用严格模式,请输入确切的语句“use strict”; (或'use strict';)在任何其他陈述之前在函数的主体中。
在您的第一个代码块中,您有"use strict";
但它不是脚本中的第一个语句,因此它没有任何效果。
在你的第二个中,它是函数中的第一个语句,所以它确实如此。
答案 1 :(得分:2)
因为"use strict"
只是当前脚本/函数的第一个语句,所以只有效果。来自the MDN docs:
要为整个脚本调用严格模式,请在任何其他语句前添加确切语句
"use strict";
(或'use strict';
)同样,要为函数调用严格模式,请在任何其他语句之前将确切语句
"use strict";
(或'use strict';
)放在函数体中。