我刚刚开始学习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


在全局级别定义的任何内容都将自动链接到窗口对象。

09-25 16:30