JavaScript hoisting

  • 1863
  • 0

摘要:JavaScript hoisting

先看程式碼吧:

var myvar = 'my value';
(function() {
  alert(myvar); // undefined!!
  var myvar = 'local value';
})();

hoisting,舉起、升起…簡單說就是瀏覽器會把變數宣告移到每個 scope一開始的時候,所以上面那段程式碼等於:

var myvar = 'my value';
(function() {
  var myvar;
  alert(myvar); // undefined
  myvar = 'local value';
})();

瀏覽器是這樣解讀的,所以 undefined也就不那麼意外了吧。 from: http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

function宣告其實也是一樣:

a();
function a() { console.log("this is a"); };
a();

console.log("typeof b:", typeof b);
var b = function () { console.log("this is b"); };
b();
a 會同時完成宣告跟設定值
b 會先宣告(一開始的值是 undefined),一直到設定值之後才會是 function