问题
请写出如下代码的打印结果
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的值
网友评论