javascript - (func)() 和 (func).call(window) 之间的区别

标签 javascript self-invoking-function

我正在研究如何使用 angularjs 创建一些插件,其中一些我遇到过这个问题:

(function() {
    'use strict'
    //code...
}).call(window);

与仅使用像下面这样的自调用函数有什么区别?

(function() {
    'use strict'
    //code...
})();

最佳答案

这两个调用将具有不同的 this 值。

这段代码

(function() {
    'use strict'
    console.log(this)
})();

将记录 undefined,因为严格模式函数的直接非方法调用使用 undefinedthis 值。

这段代码

(function() {
    'use strict'
    console.log(this)
}).call(window);

将记录 window,因为 call 的第一个参数用于向被调用的函数提供 this

如果非要我猜的话,我会说这样做是为了模仿对 使用 window(而不是 undefined)的非严格行为this 一个纯粹的非方法调用。如果您指的是 window,只需使用 window

关于javascript - (func)() 和 (func).call(window) 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925994/

相关文章:

javascript - 2 以下自调用函数不起作用

javascript - 更改数据表 <tr> 的背景颜色

javascript - jQuery mouseenter 和 mouseleave 处理程序无法正常工作

javascript - 访问使用类的 ngModel 元素

javascript - 自调用函数调用其他函数的问题

javascript - JavaScript 中的自调用函数

javascript - 将div放入 slider

javascript - 无法让自定义对话框与 DirtyForms 一起使用

javascript - 自调用匿名函数与匿名函数中变量状态的范围和维护

javascript - 自调用函数作为 jQuery 文件就绪回调