谁能为我分解一下这个(看起来一开始很简单)浏览器是如何解释它的:
var a = 1;
function b() {
a = 10;
function a() {}
}
b();
alert(a);
这将带来 1
。如果我更改一个函数名称为其他任何名称等:
var a = 1;
function b() {
a = 10;
function m() {}
}
b();
alert(a);
它将会提示10
。
谁能为我分解一下这个(看起来一开始很简单)浏览器是如何解释它的:
var a = 1;
function b() {
a = 10;
function a() {}
}
b();
alert(a);
这将带来 1
。如果我更改一个函数名称为其他任何名称等:
var a = 1;
function b() {
a = 10;
function m() {}
}
b();
alert(a);
它将会提示10
。
var
声明的变量作用域是定义它的整个函数,而不是从声明点开始。这经常被描述为变量声明提升,可以看作是所有变量声明移动到函数顶部的过程。对于函数定义来说,声明和“赋值”一起移动。function b() {
a = 10;
function a() {}
}
等同于
function b() {
var a = function() {};
a = 10;
}
这意味着你声明了一个新变量 a
,a = 10
语句只改变内部变量 a
而不是外部变量。我们称内部变量 a
遮盖了外部变量。a
,这意味着使用并更改外部变量(查找变量时,按照闭包链从内部作用域到最外部作用域)。