关于js全局变量与局部变量赋值与销毁问题;
最近学习的时候遇见了一个问题:
var a,b;
function fun(){
var a= b = 3;
}
fun();
console.log(a);
console.log(b);
这里输出为undefined和3;
为什么a没有值,而b却有值呢?
首先从js代码执行顺序来说,最开始的a,b都是全局变量,没有赋值,这时候a,b都是undefined
往下执行,遇到函数调用的时候进入函数内部,这时候发现在局部重新定义了一个a,并且没有
赋值,往后又发现了b,这个b没有var关键字,所以b是全局变量,并且赋值为了3;最后,当函
数执行完之后,根据js内存机制,局部变量a被直接销毁了,而全局变量b还在产生作用;所以,
最后执行输出语句的时候,a仍然是全局中没有赋值的a,而b经过函数执行后,被赋值为了3;
最终输出结果为undefined和3;
全部评论
(1) 回帖