簡體   English   中英

Javascript / jQuery函數參數

[英]Javascript/jQuery function arguments

新手jQuery / Javascript問題在這里

我看到以下列方式編寫的函數:

some_function = function(event) {

}

我的問題是:該event參數意味着什么? 它是可選的嗎? 如果我想有兩個附加參數X和Y,簽名會是什么樣? 現在調用函數時,可以像some_function();一樣調用它some_function(); 而且效果很好(這使我相信它是可選的)。 但是,當我有兩個另外的參數(例如X和Y)時,情況將如何改變? 我可以像some_function(myX, myY)這樣稱呼它嗎?

謝謝!

有兩種方法可以在JavaScript中實例化函數。 它們看起來都一樣,但是含義並不完全相同。

您發布的是函數實例化,作為該語言表達式的一部分。 在這種形式下,語法是

函數 名稱 p1p2 ,... { 主體 }

“名稱”和參數是可選的; 關鍵字function和括號是必需的。 (在某些情況下,在某些瀏覽器中,使用名稱存在一些晦澀的問題;這種問題已經不那么嚴重了。)

這樣做的效果是創建一個新的函數對象。 對對象的引用就像其他任何值一樣參與表達式(嗯,就像對對象的任何其他引用一樣)。 因為它是一個函數,所以引用也可以用來調用該函數並使它的代碼(“ body”)執行,就像您期望的那樣。 (如果您做不到,那將不會是什么功能!)

可以實例化函數的另一種方法是使用函數聲明語句,這看起來令人驚訝地完全相同 (除了“ name”是必需的)。 不同之處在於關鍵字function在代碼中的確切位置:

  • 如果關鍵字function是新語句中的第一件事,則說明您有一個函數聲明,並且需要“ name”。 在這種情況下,該語句不是 表達式語句 ,並且該語句唯一要做的是實例化該函數並將該函數的引用或多或少地綁定到“名稱”,就好像“名稱”是局部變量(如果在本地變量中則是全局變量)全球范圍)。

  • 如果關鍵字function出現在表達式的任何其他位置(表達式語句或埋在其他上下文中的表達式,例如forwhile循環語句的頂部),則它是函數實例化表達式。

現在,無論函數是如何“誕生”的,一旦獲得對該函數的引用,就可以調用該函數並根據需要傳遞盡可能多的參數。


我個人不知道趨勢是如何開始的,甚至不應該將其視為趨勢,但是看到本地函數用這樣的代碼(以及您發布的代碼)實例化是相當普遍的:

var some_function = function( arg1, arg2 ) {
  /* some code */
};

這是表達式中函數實例化的一個示例。 最終結果是符號“ some_function”被綁定到新創建的函數。 但是,從(幾乎)等效函數聲明中,將名稱綁定到函數的方式之間存在細微的挑剔:

function some_function( arg1, arg2 ) {
  /* some code */
};

第二種方法(函數聲明語句)更好的一個簡單原因是,函數名稱將顯示在堆棧跟蹤中。 當然,可以通過冗余的外觀來實現:

var some_function = function some_function( arg1, arg2 ) {
  /* some function */
};

我真的不知道為什么要這么做,但是除了在一些頑皮的環境中,它還是可以的。

該代碼段含糊不清,但是我通常可以回答您的問題。

您提供的代碼中的event參數就是該函數將用來引用從其他任何代碼傳遞給該函數的第一個參數的函數。 例如,如果您有代碼調用了some_function函數,並向其傳遞了一個字符串"hello world!" ,呼叫將類似於:

obj.some_function("hello world!")

some_function函數內部,變量event將包含"hello world!" 另外,您可以將some_function簽名更改為: some_function(blah)並且都一樣,您只需要使用blah而不是event來引用參數即可。 您為參數選擇的變量名稱完全由您決定,盡管您要確保不使用語言保留的名稱(例如inforcontinuebreak等)。

從技術上講,所有參數對於JavaScript函數都是可選的,除非函數的內部代碼強制執行參數(即,如果缺少參數,則它可能返回或引發錯誤)。

@Pointy回答了我要提出的另一點...您提供的代碼正在將該函數定義為表達式。 我在創建作為對象屬性的函數時會使用該語法(這就是為什么我的上述代碼開頭具有obj.的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM