我对JavaScript范围有一些了解 - 该语言具有函数级范围,并且变量和函数声明被提升到其包含范围的顶部.但是,我无法弄清楚为什么以下两段代码记录不同的值:
这会将值1记录到控制台:
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
神秘的是,这记录10:
var a = 1;
function b() {
a = 10;
return;
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
那么引擎盖下面发生了什么?
Thi*_*ilo 14
我发现第一个例子更神秘......
在第二个示例中,您不在a函数内部声明变量.因此,当您指定时a,它会a以外部为目标.非常直截了当.
在第一个示例中,您a在函数内部声明了一个变量,但是以一种不寻常的方式:通过声明一个名为的函数a.因此,分配a将使用该本地"变量".
这里要带走两件事:
a)变量和函数声明被"提升"到其范围的顶部.虽然function a(){}写在最后,a但是已经创建了保持它的变量并且在范围的顶部可见.
b)函数也可以用作变量.您可以传递函数,可以重新分配函数定义.它们与其他变量共享相同的命名空间.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |