1

有什么区别

(function($){
    $(document).ready(function() {

        $(this)/*... jQuery functions */

    });
})(jQuery);

还有这个?

(function(jQuery){
    jQuery(document).ready(function() {

        var $ = jQuery;
        $(this)/*... jQuery functions */

    });
})(jQuery);

我应该什么时候使用每个?

4

1 回答 1

2

这两个示例之间的主要区别在于,一个示例的范围更广。在第一个示例中,您的重新定义的范围比第二个示例中的局部变量要高。从理论上讲,本地范围内的使用可能会稍微快一些,但这是否是有意义的差异还是取决于很多因素。

每个嵌套函数声明都有自己的一组局部变量。当 javascript 解释器去查找变量的值时$,它首先在最局部的范围内查找它(此时正在执行的函数的局部变量)。如果它在那里没有找到它,它会沿着链向上寻找更高范围内的其他变量。如果在下一个更高级别的范围内没有找到它,它会继续沿着链条上升。最终,它到达全局范围并在全局范围中搜索所需的符号。如果在那里找不到它,那么它是未定义的。

在您的第一个代码示例中,$将在这个更高的范围内找到,因为它不是正在执行的 document.ready 回调函数的直接局部变量。在您的第二个示例中,它将是一个真正的局部变量,因此可以更快地找到它。

此外,这两种情况都分配$给您范围内的非全局变量,以保护它不被外部代码劫持。

于 2012-12-02T08:40:06.870 回答