請問:有var跟沒var應用上的差別?謝謝
菜鳥提問:
一.
var one = function () { return "one"; };
二.
function one () { return "one"; };
請問使用上一跟二,會有什麼差別呢
菜鳥再此感謝
------------------------------------------
心寫來潮寫了這篇文章
從他的提問,結果上來說是沒有分別的,但實際上還是有分別:
先簡單說一下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 賦值 簡單範例一下:
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"; };請問使用上一跟二,會有什麼差別呢
這個答案具體要看情況
PS:補充一點
var one = function(){}
這個是暱名函數
function one(){}
這個是具名函數
這兩者的不同我就不在這邊說明了
但你可以用.toString() 來看看他們有什麼不同的地方