Javascript 为什么在$(函数(){…})中声明?

Javascript 为什么在$(函数(){…})中声明?,javascript,jquery,Javascript,Jquery,我正在查看的应用程序加载一个外部javascript文件,如下所示: $(function () { // Don't allow browser caching of forms $.ajaxSetup({ cache: false }); var dialogs = {}; var getValidationSummaryErrors = function ($form) { // We verify if we created it b

我正在查看的应用程序加载一个外部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 () {  ... }
这样做的目的是什么?我是否可以在没有“$(function(){}”的情况下在平面文件中声明变量和内容

表示函数将在加载页面(DOM部分)后运行,而不是在解析代码时运行。这可以确保页面加载更快,并且javascript运行所需的一切都可用。

$(function(){…});
只是
$(document).ready(function(){…})的缩写;
,确保在DOM准备就绪之前不会执行代码,否则影响DOM的某些代码可能无法正常工作


See

$()
jQuery.ready()
的快捷方式,它在页面DOM完全加载后执行代码。有时,您希望在执行某些操作之前确保文档已准备就绪。

这是$(文档)ready(函数(){…})的简明表示法“注意:加载DOM后,jQuery document ready将启动。它不会等待整个页面(包括图像等)加载

实际上,放入
的任何脚本都会立即执行,即如果脚本与DOM交互,则需要准备就绪


第三,分离关注点需要它。理想情况下,你的javaScript和HTML是在不同的文件中。如果你遵循这一点,你的HTML中就不会有任何在线脚本标记。

也许还有一些东西与closureJavaScript是一种危险的强大语言。如果你没有,我建议你查看Doug Crockford的视频。Closure exp非技术术语。它还可以避免污染全局名称空间。是的,但您不需要jQuery。正确使用
(function(){…})(
)就可以了。这正是为什么我希望人们使用
$(document.ready(function(){…})
而不是
$(function(){…})因为前者的作用更加明显。我建议使用类似于jQuery(function($){…})的东西;
因为你建立了一个自动的无冲突系统,你总是可以在这个函数的代码中使用普通的
$
$(function () {  ... });