前端100问

【前端100问】Q41:下面代码输出什么

2021-01-06  本文已影响0人  alanwhy

写在前面

此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
为了备战 2021 春招
每天一题,督促自己
从多方面多角度总结答案,丰富知识
下面代码输出什么
简书整合地址:前端 100 问

正文回答

var a = 10;
(function () {
  console.log(a);
  a = 5;
  console.log(window.a);
  var a = 20;
  console.log(a);
})();
// undefined
// 10
// 20

在立即执行函数中,var a = 20; 语句定义了一个局部变量 a,由于 js 的变量声明提升机制,局部变量 a 的声明会被提升至立即执行函数的函数体最上方,且由于这样的提升并不包括赋值,因此第一条打印语句会打印 undefined,最后一条语句会打印 20。

由于变量声明提升,a = 5; 这条语句执行时,局部的变量 a 已经声明,因此它产生的效果是对局部的变量 a 赋值,此时 window.a 依旧是最开始赋值的 10

执行解析步骤:

var a = undefined;
a = 10;
(function () {
  // 变量提升(预解析)
  var a = undefined;
  console.log(a); // 输出undefined
  a = 5;
  console.log(window.a); // 找window(全局)对象的a, 输出10
  a = 20;
  console.log(a); // 输出20
})();
上一篇 下一篇

猜你喜欢

热点阅读