2013-06-20 85 views
0

最近幾天我對JavaScript中函數表達式和聲明的區別做了很多瞭解。大多數情況下,它表示函數表達式是在javascript中創建函數的首選方式。有時它說的是相反的,所以我不確定,但我現在仍然用表情。函數表達式中的變量

但是有一點我不能找到的表達式作爲例子。這可能是一個愚蠢的問題,但我真的很想知道。讓我們假設我們有一個函數表達式,如

var nav = { 
    init: function() { 
     // Code 
    }, 
    open: function() { 
     // Code 
    }, 
    close: function() { 
     // Code 
    } 
}; 

在這種情況下,它是一個下拉導航或其他功能。就像一個例子,你應該能夠打開和關閉它。現在我問你,我如何在代碼中定義變量,所以我可以在「打開」,「關閉」和「初始化」函數中使用這些變量?在這種特殊情況下,我可能需要像這樣的變量:

var 
    $nav = $(".nav"), 
    navHeight = $nav.height(), 
    navTest = "Test"; 

你通常會怎麼做?可能這個問題已經在其他地方得到了解答,但是我真的找不到任何東西,也許是因爲我搜索了錯誤的關鍵字。

我會很感激,如果有人能解釋我/給我一個鏈接到一個教程 - 一個javascript函數初學者:)

謝謝:)

回答

1

您可以將共享變量保留在閉包中,以使它們對您的對象的方法保持私有。一種常見的技術是module pattern。您可能也有興趣Private Members in Javascript

+0

感謝您的鏈接,我仍然是JavaScript的新手,只會用於前端相關的東西(簡單的東西在滾動上做一些動畫,例如滑塊,圖庫等)。我總是做的只是寫下所有不同的jQuery點擊,懸停等功能。因此,留我的導航示例我:http://codepen.io/anon/pen/hcdHs – Daniel

+0

所以我不知道如果我的需要和經驗,我需要私人和公共職能(我甚至不知道,當使用它們中的哪一個),我只想編寫代碼,這是更結構化的,這就是爲什麼我想出了功能表達式,這似乎是我的結構。這是對我來說正確的方式嗎?你如何看待或作爲專家處理代碼?(請參閱上面的代碼筆)? – Daniel

1

好了,你正在創建功能的特性對象nav。您可以簡單地將變量作爲其他屬性與這些函數一起添加。

var nav = { 
    myHeight: 12, 
    height: function() { 
     return this.myHeight; 
    }, 
    increaseHeight: function(howMuch) { 
     this.myHeight += howMuch; 
    } 
    init: function() { 
     // use this.myVariable here 
    }, 
    // ... 
}; 
+0

謝謝你回答我的問題的變數。我在哪裏申報變量,如果我需要他們爲不同的表達?因此,例如,我需要「var nav = function(){...}」和「var something = function(){...}」中的「var $ body = $(」body「)」?我只是把它寫在文件的頂部,還是有更好的辦法嗎? – Daniel

+0

那麼,你可以把它寫在文件的頂部,但這會使它成爲另一個全局變量(如'nav')。您可能會考慮使用模塊模式來避免使用另一個變量混淆全局範圍,並將'$ body','nav'和'something'全部放在同一個模塊中,並只顯示所需的變量。 – elias

+0

謝謝你,我會看看模塊模式,看看我是否理解它。 – Daniel