var a=b=5

1.var a=b=5相当于拆解成var a=b; b=5;

2.然后,b=5前面没有var,相当于声明为全局变量.

3.所以就相当于:

        var b;

       (fun…{ var a=b; b=5; })();

       console.log(b); //5

       console.log(a); // Uncaught ReferenceError: a is not defined 报错

------------------------------

 

1.(function(){

 

     alert(a);

 

     alert(b);

 

     var a=b=3;

 

     alert(a);

 

     alert(b);

 

   })();

 

   alert(a);

 

   alert(b);
2. var a=b; b = 3; b是全局;
3. 结果
   undefined,undefined,3,3,undefined,3;

 --------------------------------------------------------再加一题

if(! "a" in window){
    var a = 1;
}
alert(a);
 
解:
if(! "a" in window)这句代码的意思是:判断全局对象window中是否有变量a,如果没有变量a,就进入判断将a赋值为1
但是由于变量的提前声明,以上代码与如下代码等价:
var a;
if(!“a” in  window ){
    a=1;
}
alert(a);
由于变量的提前声明特性,在执行这段代码之后,全局对象window中就已经存在a这个变量了
所以不能进入判断,对a进行赋值
所以a的值为undefined
原文地址:https://www.cnblogs.com/yanghai/p/14070855.html