2012-01-23 53 views
1

Javascript:這行是什麼意思?

!function ($) 
+6

沒有,沒有上下文。這不是一個獨立的表達。讓我們看看其餘的! – Cameron

+0

你可以給出一些上下文,比如它來自哪個文件的鏈接,或者至少是上面和下面的幾行? – Simon

+0

它看起來像一個不會返回值的自執行函數的開始。 – Havvy

回答

2

我認爲我們錯過了一些數據,但我打賭這篇文章是從一個條件語句或三元關係中得來的。

var test = 'Testing!'; 
(!function ($) { 
    alert($); 
    return false; 
}(test) ? alert("bad") : alert("good")); 

http://jsfiddle.net/MattLo/WpqfN/3/

+4

這不是封閉。 – Havvy

+1

@ Havvy:當然可以。所有函數都在JS中創建閉包。 – 2012-01-23 03:25:29

+0

Matt Lo:對於IIFE你當然是對的,但'''更有可能用來代替'()'來強制函數作爲表達式的一部分進行評估。 [看到這個問題](http://stackoverflow.com/q/8611700/1106925)。所以函數的返回結果可能被忽略。 – 2012-01-23 03:27:01

6

我敢打賭一稍微更完整的版本是這樣的:

!function ($) { 
    // some code 
}(jQuery); 

基本上上述使用!運營商有匿名函數被解釋爲一個可以立即調用的函數表達式。拿走!,你有一個無效的函數聲明(或函數聲明,取決於你的首選術語) - 無效,因爲它沒有名字。更常見的方式做,這是把它在括號:

(function ($) { 
    // some code 
})(jQuery); 

但有些人喜歡用!而不是括號來保存字符。

爲什麼你可能會使用這樣的代碼的一個原因是你可以創建一些工作變量,這些變量不會在全局範圍內結束。或者,從匿名函數中,創建一個全局範圍內的對象,但該對象具有訪問匿名函數範圍中的私有變量的方法。

關於$參數,我只是猜測jQuery將作爲參數傳遞給函數,因爲這在使用參數名稱$時很常見。您可能會這樣做的一個原因是,您可以使用另一個庫,它在使用jQuery的同時定義$,但在此塊中使用用於jQuery的$