我想知道为什么警告x是一个' unifined',为什么不是10。
var x = 10;
function foo(){
alert("foo---" + x);
};
(function(){
alert("this === window---" + (this === window));
alert("window.x---" + window.x);
alert("this.x---" + this.x)
alert("x---" + x); //undifined ? why
var x = 20;
foo.call(); //10
})();
答案 0 :(得分:0)
var x = 10;
function foo(){
alert("foo---" + x);
};
(function(){
alert("this === window---" + (this === window));
alert("window.x---" + window.x);
alert("this.x---" + this.x)
alert("x---" + x); //undifined ? why
// var x = 20; // Comment this variable
foo.call(); //10
})();
当你定义变量名x并指定一些值时,这个函数就是调用,而在你定义的所有其他警告中,就像窗口一样,但是当你只提供x时,那么在jquery中它将无法提供你想要的哪个x警告 在jquery window.x中,第一个x值在第一个函数“foo”中相同,但在第二个函数中,x在alert之后定义,因此alert是未定义的
如果你在x上发出警报,那么它会给出undefined,因为你也在该函数的警告后定义了相同的变量
答案 1 :(得分:0)
这是因为javascript的一个名为变量提升link的功能。
因此,当解释器解释您的代码时,这会在运行时发生。
var x = 10;
function foo(){
alert("foo---" + x);
};
(function(){
var x;
alert("this === window---" + (this === window));
alert("window.x---" + window.x);
alert("this.x---" + this.x)
alert("x---" + x); //undifined ? why
x = 20;
foo.call(); //10
})();
从上面可以看出,变量声明var x
被移到顶部,离开了作业。因此,当您调用alert("x---" + x)
时,尚未定义变量x。