js預解析

 

上面這段代碼中,函數聲明在函數調用下,爲何會調用成功呢?函數

hello();

function hello(){alert("hello");}

 

由於js在編譯階段預解析,將上面這段代碼轉換成:spa

var hello = function(){alert('hello');};

hello();

 

只有函數聲明纔會被提高,函數表達式在預解析階段不會被提高。code

 

再看一個案例:blog

var a=1;

function hello(){

    console.info(a);

    var a=2;

}

 

執行結果爲何是undefined呢?io

由於在預解析階段,代碼被轉換成下面:console

var a=1;

function hello(){

    var a;

    console.info(a);

    a=2;

}

因此執行結果是undefined編譯

 

這就是爲何js函數中變量聲明建議寫在最前面:function

function hello(){

  var a=1,b=2;

  console.info(a);

}
相關文章
相關標籤/搜索