关于JS函数变量作用域

这样一段代码:

var a = 123

function f() {
    console.log(a); 
    var a = 1; 
    console.log(a);
}

执行f(),会怎样输出呢?

 

你可能会想当然的第一次console.log输出的是123,也就是全局变量的值,而第二次显示是1。

但是,最先输出的是undefined。

 

函数的作用域始终优先于全局作用域,所以局部变量a会覆盖掉与他同名的全局变量,尽管第一次console.log的时候,a还没有被正式定义,但该变量已经存在本地空间了。即输出undefined。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。