返回列表 發帖
本帖最後由 hasschi 於 2014-4-9 12:07 編輯

結果上來說是沒有分別的,但實際上還是有分別:

先簡單說一下javascript的預編譯。
當瀏覽器載入js之後,會先對js的程式做一下預編譯
當你程式是這樣:
if("a" in window){
    var a = 123;
}
alert(a);

你猜猜結果會是什麼?


結果會alert 123 出來,這是寫程式邏輯與編譯邏輯有稍微的不同
js引擘會將變數預先宣告在函數的開頭
上列的範例會變成:
var a;    <-- 這行實際意味:window.a = undefined; 與null不同

if("a" in window){   <-- a存在於window,true
    a = 123;            <-- window.a = 123;
}
alert(a);                 <-- window.alert( window.a );


好這跟你的問題有什麼關係? 有一點點的關係。

當使用
function a(){
}
無疑的是宣告 a這個函數,但預編譯的情況下,會直接將 a 賦值

簡單範例一下:
JS:

alert(a());
function a(){
     return 1;
}
結果會alert 1

實際的情況:
var a;
a = function a(){return 1;}
alert(a());


那來複雜的
a();
var a = function(){alert("1")}
function a(){alert("2")}
a();

結果是會是:先出現2 再出現1(隱藏內容 反白)


分析實際情況:
var a;
a = function a(){alert("2")}
a();
a =  function(){alert("1")}
a();


最後回到你的問題:
一.
var one = function () {
    return "one";
};

二.
function one () {
    return "one";
};
請問使用上一跟二,會有什麼差別呢

這個答案具體要看情況

<script>
  // 出錯
  one();

  var one = function() {
  }
</script>

<script>
  // 不會出錯
  one();

  function one() {
  }
</script>


謝謝你看完這麼冗長的內容


PS:補充一點
var one = function(){}
這個是暱名函數
function one(){}
這個是具名函數

這兩者的不同我就不在這邊說明了
但你可以用.toString() 來看看他們有什麼不同的地方

TOP

返回列表 回復 發帖