1、题目
var a = 10; (function () { console.log(a) a = 5 console.log(window.a) var a = 20; console.log(a) })()
// undefined
// 10
// 20
2、解释
undefined 10 20,原因是作用域问题,在内部声名var a = 20;相当于先声明var a;然后再执行赋值操作,这是在IIFE内形成的独立作用域,
如果把var a=20注释掉,那么a只有在外部有声明,显示的就是外部的A变量的值了。结果A会是10 5 5
执行解析步骤: 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 })()