任何人都可以为我分解如何(这看起来很简单)是由浏览器解释的:
var a = 1;
function b() {
a = 10;
function a() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
它将带来1.如果我将一个函数名称改为其他任何东西,等等:
var a = 1;
function b() {
a = 10;
function m() {}
}
b();
alert(a);
Run Code Online (Sandbox Code Playgroud)
它会提醒10.
Den*_*ret 13
声明的变量的范围是声明var它的整个函数,它不在声明点开始.它通常被描述为变量声明提升,可以看作是所有变量声明移动到函数的开头.对于函数定义,声明和"assignement"都一起移动.
function b() {
a = 10;
function a() {}
}
Run Code Online (Sandbox Code Playgroud)
相当于
function b() {
var a = function() {};
a = 10;
}
Run Code Online (Sandbox Code Playgroud)
这意味着您声明一个新变量a,该a = 10语句只更改内部变量a,而不是外部变量.我们说内部变量会a影响外部变量.
在第二种情况下,a内部范围中没有变量,这意味着使用和更改外部变量(当查找变量时,从内部范围转到闭包链之后的最外部范围).
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |