请写出如下代码的打印结果

作者: 青山旁小溪边 | 来源:发表于2019-11-02 18:26 被阅读0次

问题

请写出如下代码的打印结果

var name = 'Tom';
(function() {
    if (typeof name == 'undefined') {
        name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

or

var name = 'Tom';
(function() {
    if (typeof name == 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})();

答案

第一个

1、首先在进入函数作用域当中,获取name属性
2、在当前作用域没有找到name
3、通过作用域链找到最外层,得到name属性
4、执行else的内容,得到Hello Tom
Hello Tom

第二个

Goodbye Tom
1、var name存在变量提升,此时if (typeof name == 'undefined')的结果为true,所以走true分支,直接打印出Goodbye Jack
2、如果将var name改为let name,将打印Hello Tom,因为let声明不会变量提升,所以走false分支就会找到IIFE外的name的值

相关文章

网友评论

    本文标题:请写出如下代码的打印结果

    本文链接:https://www.haomeiwen.com/subject/erdhbctx.html