
- 帖子
- 4
- 主題
- 0
- 精華
- 0
- 積分
- 3
- 威望
- 0
- 金錢
- 1
|
本帖最後由 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() 來看看他們有什麼不同的地方 |
|