差异

2014-02-06 13 views
0

哪些如下之间的差异:差异

方法1:

(function($, window, document, undefined) { 
....... 
})(jQuery, window, document); 

方法2:

(function($, window, document, undefined) { 
....... 
})(); 

回答

0

在这两个函数中,th ERE将是局部变量$windowdocumentundefined

中的第一个功能,将他们拥有的价值观传递(除undefined,这将是不确定的)。

在第二个函数中,它们将是未定义的(并且仍然使用相同的名称来掩盖全局变量)。

0

你的问题与你给出的代码示例没有任何意义。情理之中的事情虽然是

(function($, window, document, undefined) { 
    $("#foo").something(); 
    document.createElement("bar"); 
    // .. 
})($, window, document); 

(function() { 
    $("#foo").something(); 
    document.createElement("bar"); 
    // .. 
})(); 

在第二个功能,当$windowdocument进行访问,这些标识符的第一查找发生在功能范围 - 和自他们没有在那里找到,JS引擎不得不在链中查看“进一步”,看它是否在那里找到那些标识符的对象。当然会发现它们(假设这里jQuery可以通过$对象得到) - window是全局对象,$windowdocument之外的对象。

现在,在第一个函数中,这些对象作为参数传递到函数中,因此它们可以在函数作用域内直接访问 - 引擎不必在此范围之外继续搜索它们,这些标识符可以在那里解决。

这是一种优化技术,用于加快这些标识符的查找时间。尽管如此,它是微型优化 - 所以在大多数情况下,不会有明显的甚至可测量的差异。尽管如此,这种模式已经相当普遍。