jQuery DOM就绪和JavaScript执行

jQuery DOM ready and JavaScript execution

以下剪辑是如何工作的?

1
2
3
$((function () {
    alert('I''m ready!')
}()));

我得到它,它:

  • 执行jQuery .ready() - 只在加载DOM后才会触发它
  • 它被包裹以保持匿名(如果它传递给$仍然有一点吗?)
  • 函数是立即定义和执行的

  • How does the following snipped work?

    可以说,事实并非如此。

    让我们使用中间变量将代码正在做的两件事分开:

    1
    2
    3
    4
    5
    6
    7
    // First
    var x = (function () {
        alert('I''m ready!')
    }());

    // Then:
    $(x);

    第一位定义一个函数并立即调用它,导致显示alert。函数调用的返回值存储在x中。由于该函数不返回任何内容,因此调用它的结果为undefined.

    然后第二个位调用传递undefined的jQuery的$函数,它基本上不会做任何事情。

    你可能意味着这个:

    1
    2
    3
    $(function () {
        alert('I''m ready!')
    });

    请注意,调用函数后没有()。这样就崩溃了:

    1
    2
    3
    4
    5
    6
    7
    // First
    var x = function () {
        alert('I''m ready!')
    };

    // Then:
    $(x);

    这里发生的是函数被定义而不被调用;对该函数的引用存储在x中。

    然后我们调用$并传入该函数引用,这是$(document).ready(x)的快捷方式。

    所以这段代码:

    1
    2
    3
    $(function () {
        alert('I''m ready!')
    });

    首先定义一个函数(不调用它),然后将对该函数的引用传递给$

    稍后,当DOM准备就绪时,jQuery将调用该函数。


    这不会创建文档就绪处理程序。 jQuery的$()函数会根据您传递给它的内容执行不同的操作,在这种情况下,您传递的是undefined

    内部匿名函数表达式:

    1
    2
    3
    (function () {
        alert('I''m ready!')
    }())

    由于后面的()而立即执行,然后将其返回值传递给$() - 它没有显式返回任何内容,因此返回undefined(如上所述)。

    如果您确实想在文档准备好之后执行该警报,请删除(),如下所示:

    1
    2
    3
    $(function () {
        alert('I''m ready!')
    });


    1
    2
    3
    $(function() {
    console.log("ready!" );
    });

    是简写

    1
    2
    3
    $( document ).ready(function() {
    console.log("ready!" );
    });

    看到这个http://learn.jquery.com/using-jquery-core/document-ready/