授權方式(Auhorization): CC-BY 4.0

猜猜看

var x = 5;
(function () {
    alert(x);
  var x = 6;
})()

請問alert答案是?
答5的人請繼續看下去。

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

緣起

今天在##javascript 有人問這個 http://jsfiddle.net/2mS5Q

後來再看ECMASCRIPT 6的新Feature的時候看到了解答
http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

結論

javascript 是 function scope 然後 無論你在那裏宣告,他都會當作是最前面宣告
於是前面的題目就變成

var x = 5;
(function () {
  var x;
    alert(x);
  x = 6;
})()

答案就是 undefined

Comments

comments powered by Disqus