第30题:变量提升的题(京东)

题目:

下面这段代码的结果是?

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

解析:
这里立即执行函数是一个块级作用域:里面的var会变量提升,如下:

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

答案就很明显了:Goodbye Jack

如果想打印Hello Tom,将var 换为let,let不存在变量提升:

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

或者这样写:

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

首先在进入函数作用域当中,获取name属性 ,在当前作用域没有找到name ,通过作用域链找到最外层,得到name属性值为Tom.

发布了229 篇原创文章 · 获赞 169 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_41257129/article/details/103780473