gpt4 book ai didi

javascript - 访问在外部函数中定义的属性

转载 作者:行者123 更新时间:2023-11-30 09:42:32 24 4
gpt4 key购买 nike

我试验过闭包并发现了意想不到的行为。有人可以解释为什么这段代码以这种方式工作吗?

function foo() {
this.a='hello';
return {
aaa:function() {
return a; // this suprises me, how can be here accessed 'a' ?
}
}
}

o=foo();
alert(o.aaa()); // prints 'hello' ! , I expected undefined

我不明白,为什么我总是使用 var that=this 短语,如果可以直接从内部函数访问函数属性。

jsfiddle https://jsfiddle.net/5co6f707/

最佳答案

它显示 'hello' 因为你没有处于严格模式,所以 this 是全局 window 对象而不是未定义的,并且当您为 this.a 赋值时,a 成为全局变量。因为 a 是一个全局变量,它在任何地方都可以访问。您可以在脚本的最后添加 alert(a);,它也会显示 'hello': https://jsfiddle.net/5co6f707/1/ .

它不应该工作(并且不在严格模式下)并且不应该被使用。如果您打算使用 foo 作为构造函数,那么您应该在调用它时使用 new 关键字(这会破坏您的代码,但以一种好的方式)。

关于javascript - 访问在外部函数中定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492006/

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