var myvar = '变量值'; (function() { console.log(myvar); // 变量值 myvar = '内部变量值'; })(); var myvar = '变量值'; (function() { console.log(myvar); // undefined var myvar = '内部变量值'; })();
为何加了个“var”差异那末大?第二段代码,
var myvar = '内部变量值'; 提前了,应该输出“内部变量值”啊?
这涉及到编译原因,在进行语义分析的时候,会把一个区间内的所有变量收集起来准备分配数据,但是都处于undefined状态,你的第一种使用的不是区间内(局部)变量,所以myvar的值是直接映射到外部变量的值。第二种因为你在内部定义的新的myvar,所以,在语义的时候会认为你区间内有一个新的变量myvar,所以,在此myvar因为是新的,所以是undefined状态,而你在输出的时候myvar不学未赋值。
所以,即使js是顺序执行,但是,对于一个语句块还是会进行一些整体处理,之后再进行执行的。
太棒了!很透彻的解答!
變量提升,賦值不會提升
第二段code實際等於
var myvar = '变量值'; (function() { var myvar; console.log(myvar); // undefined myvar = '内部变量值'; })();