js变量提升

JS把定义在后面的变量(并不赋值)或函数(整个函数)提升到前面定义。
作用域(scoping)
变量提升(Hoisting)

最简单的栗子:

var v='Hello World'; 
(function(){ 
  alert(v); //undefined
  var v='I love you'; 
})() 

变量提升:

预编译期声明变量不赋值
执行期赋值

(function() {
    var a = 'One';
    var b = 'Two';
    var c = 'Three';
})()
等价于
(function() {
    var a, b, c;
    a = 'One';
    b = 'Two';
    c = 'Three';
})()

函数提升

函数提升是把整个函数都提到前面去

函数表达式

var a=function(){}

函数声明式

function a(){})

重点:只有"函数声明形式"才能被提升。

函数声明:
function myTest(){ 
  foo(); //这里成功
  function foo(){ 
    alert("我来自 foo"); 
  } 
} 
myTest(); 
函数表达式:
function myTest(){ 
  foo(); //foo is not a function
  var foo =function foo(){ 
    alert("我来自 foo"); 
  } 
} 
myTest(); 

你可能感兴趣的:(js变量提升)