(function(){在Javascript中的含义

时间:2014-02-05 11:04:54

标签: javascript jquery document-ready deferred-execution

我希望了解此代码之间的区别:

(function() {

和这段代码:

$(function() {

第一个示例是否在文档就绪后运行代码,第二个示例是什么?或者仅仅是功能的范围而已?

7 个答案:

答案 0 :(得分:5)

第一个例子是一个闭包,它是JavaScript中常用的设计模式。在第二个中,您调用$函数给出另一个函数作为参数(jQuery将在文档准备好后立即执行它,因为它是$(document).ready(function () {})的别名)

这是关闭的一个例子:

(function () {
    var foo = 'foo';
    var bar = 'bar';
    window.foo = foo;
})();    // Those () mean that you're calling this anonymous function

console.log(typeof foo);    // Logs 'string'
console.log(typeof bar);    // Logs 'undefined', since 'bar' is internal to the closure's
                            // scope and was not exposed like was 'foo'

这是$(function () {})的一个例子:

$(function () {
    alert('Document ready');
});

检查这些页面:

答案 1 :(得分:3)

你的第一个例子就是直接调用匿名函数,它允许你执行类似(demo)的操作:

(function(test) {
    alert(test);
})('asd')

而你提供的第二个例子是一个jQuery特定的调用,它在DOM准备就绪后运行 - 它基本上是$(document).ready(function(){});的简写(see here

答案 2 :(得分:2)

第一种方法,正在使用自动执行匿名函数。

  1. 立即执行/调用这些方法。
  2. 这些主要用于防止全局范围/命名空间。
  3. 这些通常被称为一次。
  4. 有关自行执行匿名函数的详细信息,请访问http://markdalgleish.com/2011/03/self-executing-anonymous-functions/

    第二种方法,我们正在调用jQuery短版本的ready方法。

    调用jQuery ready方法有三个版本(来源: jquery api)

    $( document ).ready( handler )
    $().ready( handler ) (this is not recommended)
    $( handler )
    

    有关jQuery ready方法的更多信息,请查看http://api.jquery.com/ready/

答案 3 :(得分:0)

 (function() {

这个javascript闭包是self executing anonymous function,立即运行

 $(function() {

jQuery factory function接受函数作为参数和runs after DOM is ready

答案 4 :(得分:0)

第一个:

(function() {

self-invoking function(一个自称的匿名函数),如:

(function(){  // some code… })(); 

第二个:

$(function() {

是一个特定于jQuery的DOM就绪事件处理函数,就像jQuery $(document).ready函数一样。

答案 5 :(得分:0)

(function() {
    // Code goes here
}());

这是一个“立即函数”,意味着它在定义后立即执行。它也是一个匿名函数,因为它没有名称。

此构造用于为不污染(通常)全局命名空间的脚本提供变量范围。这通常被称为“封闭”。不污染全局命名空间是一种很好的做法,因为它可以防止混淆变量名称并且无意中弄乱其他脚本的操作。

$(function() {
    // Code goes here
});

这是jQuery的$(document).ready(function() { /* code goes here */ })的简写。它只在整个DOM被渲染时才执行代码,并且被认为是准备好的。如果您的脚本插入<body>的最末端,通常可以省略此项。

答案 6 :(得分:0)

第一个通常会立即运行代码,但仅仅是因为未显示的代码,在匿名函数定义的末尾。它会因为:

而被调用
(function() { doSomething(); } ());

请注意,这会立即运行,而不是在加载文档后运行。尾随空的parens调用函数,参数为零,就像调用myFunction()时一样。它通常以这种方式写入“范围”变量。例如,您可以像这样包装整个javascript文件,以保护它免受其他包含的文件的侵害。

第二个示例中,$实际上是一个函数。它是“jQuery”的同义词,因此$()就像jQuery()一样。 jQuery实际上也会立即运行此函数,并以匿名函数定义作为参数。当你传递这样一个函数定义时,jQuery立即做了什么,是文件就绪事件触发时运行的函数定义队列。