为什么这显示出变量提升的行为?
Why is this showing a behaviour as of variable hoisting?
我就不多说了,看代码就够了:
JS:
var myvar = "my value";
(function (){
console.log(myvar); //returning undefined
var myvar = "local value";
})();
现在一个很简单的问题:变量myvar
是在函数执行前声明的,为什么控制台显示undefined?
您有两个名为 myvar
的变量。一个在函数内,一个在函数外。
在函数内部,您可以访问在函数内部声明的函数(如您所说,已提升)。那时它还没有被赋值,所以它是 undefined
.
一行之后,你给它赋值。
就像对 Quentin post 的补充。您的代码是什么样子 "post hoist":
var myvar = "my value";
(function (){
var myvar;
console.log(myvar); //returning undefined
myvar = "local value";
})();
如果你这样看,很明显为什么它是未定义的。
如果您希望变量为 "My value",您可以这样做:
var myvar = "my value";
(function (myvar){
console.log(myvar); //returning "my value"
myvar = "local value";
})(myvar);
我就不多说了,看代码就够了:
JS:
var myvar = "my value";
(function (){
console.log(myvar); //returning undefined
var myvar = "local value";
})();
现在一个很简单的问题:变量myvar
是在函数执行前声明的,为什么控制台显示undefined?
您有两个名为 myvar
的变量。一个在函数内,一个在函数外。
在函数内部,您可以访问在函数内部声明的函数(如您所说,已提升)。那时它还没有被赋值,所以它是 undefined
.
一行之后,你给它赋值。
就像对 Quentin post 的补充。您的代码是什么样子 "post hoist":
var myvar = "my value";
(function (){
var myvar;
console.log(myvar); //returning undefined
myvar = "local value";
})();
如果你这样看,很明显为什么它是未定义的。
如果您希望变量为 "My value",您可以这样做:
var myvar = "my value";
(function (myvar){
console.log(myvar); //returning "my value"
myvar = "local value";
})(myvar);