我刚刚开始学习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
作为参数,但是您没有传递任何内容。
基本上,您的函数需要一个参数shoutIt
。此参数将在函数的本地范围内。如果未传递任何内容,并且当编译器获取shoutIt
的值时,它将立即从本地范围访问它,并且不会进入全局级别。在本地级别,因为您没有向函数传递任何内容,所以它为您提供了undefined
有两种解决方案
1)传递shoutIt的值
var shoutIt = "[YES!]";
//creating an anonymous, self-executing function
(
function (shoutIt) { //expecting that value
shoutItDebug = shoutIt;
shoutItDebug = this.shoutIt;
alert("Did it work? (1) " + shoutIt);
alert("Did it work? (2) " + this.shoutIt)
})(shoutIt);**strong text** //passing argument to the function
要么
2)不要传递任何参数
var shoutIt = "[YES!]";
//creating an anonymous, self-executing function
(
function () {
shoutItDebug = shoutIt;
shoutItDebug = this.shoutIt;
alert("Did it work? (1) " + shoutIt);
alert("Did it work? (2) " + this.shoutIt)
})();
“这”如何运作
基本上,“ this”是指javascript中的上下文。
默认情况下,它指向窗口对象。尝试做
console.log(this) //outputs the window object
在全局级别定义的任何内容都将自动链接到窗口对象。