我是JavaScript的新手,我真的不太明白为什么以下代码返回1
而不是10
:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
正在运行的代码:http://jsfiddle.net/smMtU/
如果我提醒行function a() {}
,它会按预期返回10
。此代码来自this post,用于解释JavaScript中的作用域和提升概念。也许我在阅读这篇文章时遗漏了一些东西?
请有人指出这段代码背后的概念吗?
答案 0 :(得分:7)
由于吊装,您的代码相当于
var a = 1;
function b() {
var a = function() {};
a = 10;
}
b();
alert(a);
在b
内,您不是在更改外部a
,而是在内部更改。{/ p>
答案 1 :(得分:0)
此声明在执行前为当前作用域中的函数a
创建作用域。
调用function b
并执行以下此行时
a = 10;
在函数a
b
所以这就等同了:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
到此:
var a = 1;
function b() {
var a = function(){}; //scope created before
a = 10; //'a' already exists in local scope, just replace it.
return;
}
b();
alert(a); // global 'a' remains intact