在程序中间“使用严格”

时间:2018-03-20 14:50:35

标签: javascript strict use-strict

为什么第二个功能没有使用“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();

我的问题很简单 - 为什么会这样?

2 个答案:

答案 0 :(得分:3)

请参阅the MDN documentation

  

要为整个脚本调用严格模式,请输入确切的语句“use strict”; (或'使用严格';)在任何其他陈述之前。

  

同样,要为函数调用严格模式,请输入确切的语句“use strict”; (或'use strict';)在任何其他陈述之前在函数的主体中。

在您的第一个代码块中,您有"use strict";但它不是脚本中的第一个语句,因此它没有任何效果。

在你的第二个中,它是函数中的第一个语句,所以它确实如此。

答案 1 :(得分:2)

因为"use strict"只是当前脚本/函数的第一个语句,所以只有效果。来自the MDN docs

  

要为整个脚本调用严格模式,请在任何其他语句前添加确切语句"use strict";(或'use strict';

     

同样,要为函数调用严格模式,请在任何其他语句之前将确切语句"use strict";(或'use strict';)放在函数体中。