JavaScript中的作用域的问题

var name = "lee";
function echo(){
    console.log(name);
    var name = "jack";
}

echo();

居然输出的是 undefined , undefined 不是变量定义未赋值吗?可是在 echo 函数里给 name 初始化了啊 有点蒙了

阅读 1.6k
评论
    6 个回答
    • 3.6k

    变量提升。
    函数声明和变量声明总是会被解释器悄悄地被“提升”到方法体的最顶部。

    而且在函数域里定义一个和外部变量一样名称的变量时,变量的声明会提升至第一句,赋值则不会变。
    且原型链在函数内找到变量,就不会继续向上寻找了。

    这是你的代码。

    var name = "lee";
    function echo(){
        console.log(name);
        var name = "jack";
    }
    
    echo();

    你的代码的实际效果是

    var name = "lee";
    function echo(){
        var name;
        console.log(name);
        name = "jack";
    }
    echo();

    所以console.log(name)时候,name还是undefined

    且原型链在函数内找到变量,就不会继续向上寻找。所以全局的name = lee是不起作用的。

      相似问题
      推荐文章