2012-04-22 97 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中就不会有任何内嵌的脚本标记。

相关问题