下面的代码片段有什么区别?
var a = 0;
function b(){
a = 10;
return function a(){};
}
b();
console.log(a); // => 10
Run Code Online (Sandbox Code Playgroud)
和
var a = 0;
function b(){
a = 10;
return
function a(){};
}
b();
console.log(a); // => 0
Run Code Online (Sandbox Code Playgroud)
它与JavaScript提升有关,但我对这个概念的理解恰恰相反.
dec*_*eze 56
return function a(){};
Run Code Online (Sandbox Code Playgroud)
这function ...是一个表达.甲命名函数表达式要精确.在a这里并没有多大关系,它只是提供了匿名函数.name,但它仍然只是你返回一个函数表达式.
return
function a(){};
Run Code Online (Sandbox Code Playgroud)
这相当于:
return;
function a(){};
Run Code Online (Sandbox Code Playgroud)
这function a是一个声明,而不是表达.它被悬挂,a在范围内创建一个本地名称,遮蔽外部a.即它相当于:
function b(){
var a = function () {};
a = 10;
return;
}
Run Code Online (Sandbox Code Playgroud)
Tus*_*har 26
return
function a() {}
Run Code Online (Sandbox Code Playgroud)
和...一样
return;
function a() {}
Run Code Online (Sandbox Code Playgroud)
自动分号插入后.在第二种情况下,函数a被移动到其范围的顶部.代码与.相同
var a = 0;
function b() {
function a() {};
a = 10;
return;
}
b();
console.log(a);
Run Code Online (Sandbox Code Playgroud)
由于a内部b()是内部函数然后覆盖,因此无法从外部访问b().
以下是了解吊装如何工作的演示.
var a = 0;
function b() {
console.log(a); // function
a = 10;
console.log(a); // 10
return
function a() {};
}
console.log(b()); // undefined
console.log(a);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3029 次 |
| 最近记录: |