我刚刚开始学习 Javascript,并且一直在尝试匿名自执行函数。我编写了一些代码,但无法按我预期的方式工作。为什么在此实例中需要“this”关键字来获取变量“shoutIt”的值?
第一个警报显示“它有效吗?(1) 未定义”,而第二个警报显示“它有效吗?(2) [是!]”。
谢谢!
var shoutIt = "[YES!]";
//creating an anonymous, self-executing function
(
function (shoutIt) {
shoutItDebug = shoutIt;
shoutItDebug = this.shoutIt;
alert("Did it work? (1) " + shoutIt); //doesn't work, undefined
alert("Did it work? (2) " + this.shoutIt) //works
})();
最佳答案
这里有两个名为shoutIt
的变量:一个是varshoutIt
定义的全局变量,另一个是中形参定义的变量函数(shoutIt){...
当您在非严格模式下运行非方法函数(即,形式为 foo()
而不是 bar.foo()
)时,this
等于全局对象(在浏览器中,window
)。在函数内部,this.shoutIt
引用全局范围内的 shoutIt
变量。
相比之下,shoutIt
在这里指的是具有该名称的函数参数,而不是全局变量,后者是上一级作用域。 (全局变量被同名的更直接的变量“遮蔽”。)该函数不使用任何参数调用,因此函数内 shoutIt
的值为 undefined
.
如果您想传入一个值作为名为 shoutIt
的参数,请在调用括号中提供一个值:
(function (shoutIt) {
...
})(someValue);
关于javascript - 为什么在访问匿名自执行函数的参数时需要使用 "this"关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42564378/