2012-06-30 54 views
-3

是什麼以下函數定義的形式之間的差的:不同形式定義一個函數

$.myFunction = function() { 
    //function body 
}; 

var myFunction = function() { 
    //function body 
}; 

$(myFunction = function() { 
    //function body 
}); 
+0

你好,的[jQuery的函數聲明的說明]可能重複(http://stackoverflow.com/問題/ 8480756/jquery-function-declaration-explanation), –

+2

這不是你引用的問題的重複。 – baltoro

回答

1
$.myFunction = function() { 
    //function body 
}; 

這創建了一個函數作爲$對象的屬性。如果您使用的是jQuery,那麼$是全球的jQuery對象。你會調用該函數與$.myFunction()


var myFunction = function() { 
    //function body 
}; 

這將創建分配給一個名爲myFunction變量的函數。如果您在另一個功能中執行此操作,則myFunction將僅在該範圍內可用。


$(myFunction = function() { 
    //function body 
}); 

這一塊是做兩件事情,讓我們把它分成兩個步驟,使之更加明確:

myFunction = function() { // step 1 
    //function body 
}; 
$(myFunction);    // step 2 
  1. 的第一步是創建分配給功能全球變量名爲myFunction。該變量是全局的,因爲您沒有使用var關鍵字。一般來說,你可能不想使用全局變量,當然定義不是很明顯。
  2. 第二步是(假設您使用jQuery)將myFunction傳遞給jQuery,以在DOM完成加載時執行。有關更多信息,請參閱jQuery documentation

    它更常見傳遞給jQuery的一個功能,而不將其分配給任何變量,即

    $(function() { 
        //function body 
    }); 
    
4

首先一個增加了一個函數myFunction$它可以是任何的JavaScript庫如jQuery的,MooTools的的,在內部使用$的原型等。

在第一個函數中,您只需將自己的函數添加到由$指定的JavaScript庫。


第二個是函數表達式爲oppossed到具有這種形式函數聲明

function myFunction() { 
    //function body 
} 

第三個看起來weired,但它也是使用函數表達式由於$的JavaScript庫的上下文,那麼無論這個庫是什麼意思。


要了解更多關於函數表達式和函數聲明的型差分,看看這個優秀的帖子:

的函數表達式和函數聲明之間最重要的型差分你要記住的是函數聲明無論聲明在哪裏都可用(因爲它們被提升到頂部),而函數表達式只能運行在d之前或之後定義爲您的後續代碼。一個例子是:

foo1(); // alerts "I am function declaration" 
foo2(); // error, undefined function 

function foo1() { 
alert('I am function declaration'); 
} 

var foo2 = function() { 
    alert('I am function expression'); 
}; 

foo1(); // alerts "I am function declaration" 
foo2(); // alerts "I am function expression" 

FYI,也有自調用匿名函數和自inovking命名的功能:轉換成使用這些字符的函數式

// self invoking anonymous function 
(function(){ 
    // code 
})(); 

// self invoking named function 
(function foo(){ 
    // code 
})(); 

和函數聲明:

! function(){ 
    // code 
})(); 

+ function foo(){ 
    // code 
})(); 

請注意,自解析函數在解析後立即運行,因爲()在他們簽名的末尾。

+0

第一個用法是什麼?爲什麼會有人想添加一個函數$? – baltoro

+1

@baltusaj:我們假設'$'是用於jQuery的,並且您想將自己的函數添加到jQuery對象中,則使用第一種方法。 – Blaster

0

那麼真的只有其中之一是我稱之爲函數定義,第二個。第一個是使用該函數擴展全局jQuery對象(或任何其他使用美元符號的庫),第三個則很奇怪。

+1

'$'在許多框架中使用,而不僅僅是jQuery。第三和第一個定義應該是等價的,在'$'object /「命名空間」中添加myFunction' – nbrooks

+0

嗯,我的意思是說jQuery或任何其他庫。第三個將起作用,但該聲明的用法是什麼?看起來沒有必要 – elclanrs

+0

第一個用法是什麼?爲什麼會有人想添加一個函數$? – baltoro

0

假設「$」代表jQuery(這在這裏看起來很明顯),第三種語法定義了一個匿名函數並將其作爲參數傳遞給jQuery,這是一個用於註冊jQuery.DocumentReady回調的快捷方式。

相關問題