三个 JavaScript 例子中的函数提升为何导致不同的输出?

查看 32|回复 0
作者:klion   
问题描述
我在学习 JavaScript 的函数提升( hoisting )时,遇到了三个看似相似但输出不同的例子。根据函数提升的原理,这三个例子的输出应该是相同的,越想越觉得奇怪啊
例子 1
var a = 0;
console.log("1 a:", a);
if(true){
    a = 1;
    function a() {}
    a = 5;
    console.log("2 a:", a);
}
console.log("3 a:", a);
经过验证,输出结果为:
1 a: 0
2 a: 5
3 a: 1
例子 2
var a = 0;
console.log("1 a:", a);
if(true){
    a = 1;
    a = 5;
    console.log("2 a:", a);
    function a() {}
}
console.log("3 a:", a);
经过验证,输出结果为:
1 a: 0
2 a: 5
3 a: 5
例子 3
var a = 0;
console.log("1 a:", a);
if(true){
    function a() {}
    a = 1;
    a = 5;
    console.log("2 a:", a);
}
console.log("3 a:", a);
经过验证,输出结果为:
1 a: 0
2 a: 5
3 a: f a() {}
问题
[ol]
  • 这几个例子在函数提升方面有何不同?
  • 为什么每个例子的输出都不相同?
    [/ol]
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部