function hoisting是什麼?

一個不說你也不會知道的js語言特性,是指js看到function xxx(){}這種宣告時會把定義搬到scope最頂端
的行為,hoisting的意思是提昇。

自從在Javascript Patterns這本書上面看到hoisting的時候,就一直在想到底有什麼場合可以用到這個奇妙的語言特性?想不到還真的遇到了,雖然其實是個反例XD

原文出自PTT Web_Design版「[問題] jQuery 參數的問題~」,這名網友問為什麼下面的js不能用?

$("#test").bind("click", aaa);
var aaa= function () {
    alert("yo");
}

好傻好天真?

雖然不知道為什麼提問者堅持要把函數宣告放在用它之前,不過既然他問了,剛好這情況可以利用function hoisting來做,只是要修改一些小地方。

$("#test").bind("click", aaa);
function aaa() {
    alert("yo");
}
/* function expression instead of function declaration */

我另外寫了一個jsfiddle來測試:
{% jsfiddle Ytmqw %}

做的到,只不過真的有必要嗎?

真的有太多理由不建議這樣做。原po在我回文後也沒出現,看來也無從得知他這樣做的理由了。

Comments

comments powered by Disqus