首页 新闻 会员 周边

JavaScript代码的小小疑问(54)

0
[已解决问题] 解决于 2015-10-20 13:08
var myvar = '变量值'; 
     (function() { 
      console.log(myvar); //   变量值
      myvar = '内部变量值'; 
    })();


var myvar = '变量值'; 
     (function() { 
      console.log(myvar); // undefined
      var myvar = '内部变量值'; 
    })();

为何加了个“var”差异那末大?第二段代码,

var myvar = '内部变量值'; 提前了,应该输出“内部变量值”啊?
Coca-code的主页 Coca-code | 初学一级 | 园豆:10
提问于:2015-10-20 11:26
< >
分享
最佳答案
0

这涉及到编译原因,在进行语义分析的时候,会把一个区间内的所有变量收集起来准备分配数据,但是都处于undefined状态,你的第一种使用的不是区间内(局部)变量,所以myvar的值是直接映射到外部变量的值。第二种因为你在内部定义的新的myvar,所以,在语义的时候会认为你区间内有一个新的变量myvar,所以,在此myvar因为是新的,所以是undefined状态,而你在输出的时候myvar不学未赋值。

所以,即使js是顺序执行,但是,对于一个语句块还是会进行一些整体处理,之后再进行执行的。

奖励园豆:5
ensleep | 小虾三级 |园豆:1682 | 2015-10-20 13:01

太棒了!很透彻的解答!

Coca-code | 园豆:10 (初学一级) | 2015-10-20 13:09
其他回答(1)
0

變量提升,賦值不會提升

第二段code實際等於

var myvar = '变量值'; 
(function() {
    var myvar;
    console.log(myvar); // undefined
    myvar = '内部变量值'; 
})();
RosonJ | 园豆:4910 (老鸟四级) | 2015-10-20 11:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册