2012-04-22 96 views
3

我期待在該應用程序加載外部JavaScript文件,該文件是這樣的:

$(function() { 

    // Don't allow browser caching of forms 
    $.ajaxSetup({ cache: false }); 

    var dialogs = {}; 

    var getValidationSummaryErrors = function ($form) { 
     // We verify if we created it beforehand 
     ... 
     ... 
     } 
     return errorSummary; 
    }; 

據我所知,該文件設置了一些變量,並聲明瞭一個函數調用getValidationSummaryErrors。

我不明白的是爲什麼這是內

$(function() { ... } 

所有什麼是這樣做的目的是什麼?我不能只是聲明平面文件裏面的變量,事情沒有「$(函數(){}」?

+0

也許還有一些封閉的東西 – hackartist 2012-04-22 05:46:45

+0

JavaScript是一種危險的強大語言。如果你沒有,我建議你查看Doug Crockford的視頻。 http://www.youtube.com/watch?v=hQVTIJBZook – 2012-04-22 05:56:45

+0

以非技術術語解釋封閉。 http://stackoverflow.com/a/6472397/310767 – 2012-04-22 06:02:53

回答

8

$(function() { ... });只是$(document).ready(function() { ... });的簡稱,它確保代碼不會被執行,直到DOM已準備就緒,否則某些影響DOM的代碼可能無法正常工作。

請參閱http://api.jquery.com/ready/

+1

它也避免污染全局名稱空間。 – 2012-04-22 05:47:09

+0

是的,但你不需要jQuery。一個'(函數(){...})()'正確使用。 – dtbarne 2012-04-22 05:50:24

+2

這正是我寧願看到人們使用'$(document).ready(function(){...})'而不是'$(function(){...});'因爲前者是更明顯的是它做了什麼。 – jfriend00 2012-04-22 06:04:09

4
$(function() { ... }); 

意味着該函數將網頁(DOM部分之後運行)加載,而不是當代碼被解析,這樣你就可以確保頁面加載速度更快,而且所有必要的東西都可以用來運行javascript。

4

$()jQuery.ready()的快捷方式,它在頁面DOM完全加載後執行代碼。有時候你想在做某些事情之前確保文檔已經準備好。

2

這是$(document).ready(function(){...})的簡明表示法。「注意: jQuery文檔準備好在DOM已經加載時觸發,它不會等待整個頁面(包括圖像等)來加載。

實際上,你投入<head>任何腳本立即執行,即如果該腳本與DOM交互,它需要做好準備。

第三它是需要用於分離關注點,理想情況下,你的javaScript和HTML是分開的文件,如果你遵循這個步驟,你的HTML中就不會有任何內嵌的腳本標記。

相關問題