gpt4 book ai didi

javascript - IIFE 上下文问题

转载 作者:数据小太阳 更新时间:2023-10-29 04:02:08 25 4
gpt4 key购买 nike

在以下结构中:

(function(){

var x = function(){
alert('hi!');
}

var y = function(){
alert("hi again!");
}

this.show = function(){
alert("This is show function!");
}

})();

为什么 this 引用 window 对象? IIFE 中的所有内容都应该与全局范围隔离吗? xy 函数也是 window 全局对象的属性吗?

此外,即使我在开头使用 put var h = ...:

var h = (function(){

var x = function(){
alert('hi!');
}

var y = function(){
alert("hi again!");
}

this.show = function(){
alert("This is show function!");
}

})();

this 仍然引用窗口对象——我可以从全局范围调用 show()!怎么会?

最佳答案

全局上下文(浏览器中的 window)是 this 在没有其他值可用时获取的值。

您的局部变量是局部的(也就是说,不是 window 的属性)。它们在函数内部用 var 声明。

之所以添加 var h = (function(){... 没有区别是因为你调用函数的方式。函数引用不是对象的属性值 (像 something.func()), 并且你不使用 .call().apply() 调用它,所以这指的是全局 (window) 对象。这正是语言定义的行为方式。

关于javascript - IIFE 上下文问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com