请教:为何JS函数输出‘undefined world’?var变量行为解析
为什么这段代码会输出 'undefined world'?
核心原因是var关键字的变量提升(Hoisting)特性,再加上局部变量对全局变量的遮蔽作用,具体拆解如下:
代码执行步骤
- 全局作用域中声明并赋值
var a = 'hello',此时全局变量a的值是'hello'。 - 调用函数
b()进入局部作用域后,JavaScript会先扫描函数内所有var声明,将变量声明提升到作用域顶部,但不会提升赋值操作。你的代码相当于被引擎处理成了这样:var a = 'hello'; function b() { var a; // 变量声明被提升,此时a未赋值,值为undefined console.log(a); // 输出undefined a = 'world'; // 赋值操作留在原位置 console.log(a); // 输出world } b(); - 由于函数内部声明了局部变量
a,它会遮蔽全局作用域的a——也就是说,函数内访问的a是这个局部变量,而不是全局的'hello'。
所以第一次console.log(a)时,局部a已经被声明但还没赋值,输出undefined;赋值后第二次输出world。
内容的提问来源于stack exchange,提问作者Why cry when you can code
相关产品推荐
相关产品推荐

