使用函数接受的参数与将它们分配给变量

时间:2012-12-02 08:26:50

标签: javascript

之间有什么区别
(function($){
    $(document).ready(function() {

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

    });
})(jQuery);

这个?

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

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

    });
})(jQuery);

我什么时候应该使用它们?

1 个答案:

答案 0 :(得分:2)

这两个例子的主要区别在于一个是更局部的范围。在第一个示例中,重定义的范围比第二个示例中的更高,其中它是局部变量。从理论上讲,本地范围内的那个可能会稍微快一些,但这是否有意义,或者取决于很多因素。

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

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

此外,两种情况都会将$分配给范围内的非全局变量,以防止它被外部代码开始劫持。