javascript变量声明提升(hoisting)

声明、定义与初始化

声明宣称一个名字的存在,定义则为这个名字分配存储空间,而初始化则是为名字分配的存储空间赋初值。

 
var v = "hello";
(function(){
  console.log(v);
  var v = "world";
})();
相当于:
var v = "hello";
(function(){
  var v; //declaration hoisting
  console.log(v);
  v = "world";
})();
上面两段代码运行的结果一样
答案是:undefined
 
var v = "hello";
(function(){
  var v = "world";
  console.log(v);
})();
答案是:world
 
 
 
if(!("a" in window)){  //("a" in window) 等价于声明一个a变量:为真
   var a=10;
}
alert(a);
答案是:undefined
 
if ('a' in window) {
  var a = '1';
}
alert(a)
 var a;
 if ('a' in window) {
   a = '1';
 }
答案是:1
a是个全局变量的a,
那么在浏览器中就是a === window.a ,a === window['a'],
所以'a' in window这个判断条件是成立的,然后a被赋值为 '1'
同个作用域下变量初始化与位置无关
 
 
 
  add();
  var a=1;
  var b=2;
  function add(){
   console.log(a+b);
  }
相当于:

  var a=1;
  function add(){
   console.log(a+b);
  }
  var b=2;
  add();
 输出:3
 
原文地址:https://www.cnblogs.com/hngdlxy143/p/6740794.html