对这个JavaScript代码片段感到困惑
对于这段代码,我并不奇怪全局变量“a”的计算结果是5 : 但是,对于这个代码段,全局变量“a”的计算结果为何是10而不是5?这就好像对这个JavaScript代码片段感到困惑,javascript,Javascript,对于这段代码,我并不奇怪全局变量“a”的计算结果是5 : 但是,对于这个代码段,全局变量“a”的计算结果为何是10而不是5?这就好像a=5从未发生过 : 这是由于变量提升:使用var关键字定义的任何内容都会被“提升”到当前范围的顶部,从而创建一个局部变量a。请参阅:这与提升有关 在函数中,声明了一个同名的局部变量。即使它发生在您的修改之后,也会被视为在它之前声明过——这称为提升 局部变量用于声明,但不用于值。因此: function someFunc() { alert(localV
a=5
从未发生过
:
这是由于变量提升:使用
var
关键字定义的任何内容都会被“提升”到当前范围的顶部,从而创建一个局部变量a
。请参阅:这与提升有关
在函数中,声明了一个同名的局部变量。即使它发生在您的修改之后,也会被视为在它之前声明过——这称为提升
局部变量用于声明,但不用于值。因此:
function someFunc() {
alert(localVar); //undefined
var localVar = 5;
}
函数,如果用function name(){…
语法声明,则同时声明和值
function someFunc() {
alert(someInnerFunc()); //5
function someInnerFunc() { return 5; }
}
这被称为“
var
声明(和function()
声明)被移动到其作用域的顶部。据推测,语句var a=23
为整个作用域创建了一个局部变量。因此,全局a
对整个func()进行了隐藏
,不仅仅是语句下面的行。因此,在第二个代码段中,a=5
将赋值给下面声明的局部变量。因此,这里有两件事:和
因为第一个变量声明被“提升”到顶部,所以您的代码相当于:
var a = 10;
function func(){
var a;
a = 5;
a = 23;
}
因为第二个问题,你用一个局部变量“隐藏”了全局变量
a
,所以这些变化不会反映到全局变量a哇,我想你的问题已经得到了回答;)+1是一个例子,并且费心解释提升的含义。
function someFunc() {
alert(someInnerFunc()); //5
function someInnerFunc() { return 5; }
}
var a = 10; //a is 10
function func(){
a = 5; //a is 5
var a = 23; // a is now in local scope (via hoisting) and is 23
}
func();
alert(a); // prints global a = 10
var a = 10;
function func(){
var a;
a = 5;
a = 23;
}