让前端飞Web前端之路Web 前端开发

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

2019-11-02  本文已影响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的值

上一篇 下一篇

猜你喜欢

热点阅读