2014-05-25 60 views
0

我開始進入使用JavaScript越來越多的這些日子裏,雖然我還在學習。說了這麼多之後,我想檢查一下我在構建基本功能時遵循什麼被認爲是「最佳實踐」。如何建立基本的JavaScript函數

當我看到其他的JavaScript代碼,我經常人們以不同的方式構建功能。當然,這取決於功能的上下文。

在對下面的實施例4層的功能,將執行最好的?什麼被認爲是最佳實踐?

我經常用第3個功能佈局的混合物,而有時我用的是第四個了真正的大重的東西。

我只是使用了一個基本的點擊功能爲例,但我想的時候使用這些功能語法爲什麼更廣泛的答案。

1.

var myDiv = document.getElementById('#myDiv'); 

myDiv.addEventListener('click', function() { 
// do something 
// all future variables are stored locally within the click function 
} 

2.

document.getElementById('#myDiv').addEventListener('click', function() { 
// do something 
// all future variables are stored locally within the click function 
} 

3.

function doSomething() { 
// do something 
// all future variables are stored locally within the click function 
} 

document.getElementById('#myDiv').addEventListener('click', function() { 
doSomething(); 
} 

4.

function doSomething() { 
    var myDiv = document.getElementById('#myDiv'); 

    myDiv.addEventListener('click', function() { 
    // do something 
    // all future variables are stored locally within the click function 
    } 
} 

new doSomething(); 

回答

1

例1和例2做「相同」。它只是一個品味和偏好的問題。在第一種情況下,您正在保存(想像「relabel」之類的)對「myDiv」中的對象的引用,另一種情況是您直接調用該對象...對於編譯器,它將是相同的。

隨着比如你正在創建調用一個函數,但是由於JavaScript是一種功能性的語言,那不是necesary功能3,你可以只通過該功能,其他的功能......像這樣:

例3.1:

var doSomething = function() { 
// do something 
// all future variables are stored locally within the click function 
};  
document.getElementById('#myDiv').addEventListener('click', doSomething); 

是的,的addEventListener的是,在第二個參數:)接收功能的功能。

並與例4,你正在做的事情不同。當你調用「new doSomething()」時,你正在實例化一個新的對象。但爲什麼它有效?那麼,Javascript將運行你的函數/對象內的代碼,這就是爲什麼它的工作原理。 但是你實際上正在實例化一個新的對象(但是你不會將它保存到任何地方,所以它會被垃圾收集......對象,而不是你在內部做的事情,因爲它們在div的範圍內)。

我發現所有的例子是正確的,但我不喜歡4,至少在這種情況下,它可能是簡單的,只是稱之爲「DoSomething的()」,而「新」。

+0

我將如何調用函數內的嵌套函數?例如VAR doSomething的函數=(){函數doSemethingelse(){}} – user3143218

+0

嵌套函數應與對象/ prototipe的場(在Javascript的prototipe就像其他語言中的類的定義)相關聯。稍後可以用「doSomething.theFunctionField(args)」來調用它;「 這裏解釋更好:http://www.phpied.com/3-ways-to-define-a-javascript-class/ – estebarb

1
  1. 如果你打算重用不止一次myDiv更因爲它緩存選擇
  2. #1的對手,如果你不打算再次選擇#myDiv一個好主意,用這一個
  3. 如果你去那個函數多次,好叫
  4. 我說只使用,當你想在某個時間使用的點擊事件,一個簡單的函數聲明和執行沒有目的之後