JavaScript 'use strict' ;内部函数

标签 javascript ecmascript-5 strict

Chrome Dev Console 中测试了一些 js 代码,我有点困惑。

我知道在严格模式中,当引用this关键字时不是对象方法的函数应该接收undefined而不是全局对象.

function test(){
    "use strict";
    return this===undefined;}
test(); 

输出

"use strict";
function test(){
    return this===undefined;}
test(); 

仍然错误

(function test(){
    "use strict";
    return this===undefined;}());

输出

只是想澄清一下。 ʕ•ᴥ•ʔ我是js新手。

最佳答案

您注意到的只是开发人员控制台工作方式的副作用。当您在那里输入代码时,实际上会发生这种情况(有关详细信息,请参阅 this answer):

eval.call(null, "with (window) { \
                     function test() { \
                         'use strict'; \
                         console.log(this); \
                     } test(); \
                 }");

这是对 eval间接调用,这意味着它将始终在全局执行上下文中执行(在浏览器中,即 window ).

实际上,该函数绑定(bind)到全局对象,因此 this 持有对全局对象的引用,就像您在网页中(而不是在控制台中)这样做一样:

function test(){
    "use strict";
    return this === undefined;
}

test(); // true
test.call(window); // false

关于JavaScript 'use strict' ;内部函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15135405/

相关文章:

javascript - JavaScript 是否有 i18n (Intl) 垫片?

qt - PyQt QWebkit Javascript Function.bind 不存在(ECMAScript 5 缺失函数)

javascript - IE不支持怎么办?

typescript - 如何快速区分具有非重叠属性的接口(interface)

javascript - 使用 "use strict"和可变范围

mysql - 启用严格模式时 MySQL 会进行哪些验证?

javascript - 防止某些元素获得焦点

javascript - 获取关于在 contenteditable div 中拖动图像的通知

javascript - 在 div、td 元素上覆盖 div "edit image"

php - jquery 不发送按钮选择到 php