有人能解释并证明哪一个例子“更正确”吗?
A:将对象作为参数传递
(function($){
$.doStuff();
})(jQuery);
B:在函数中检索对象
(function(){
var $ = jQuery;
$.doStuff();
})();
我非常喜欢B因为它的可读性。只有A和B之间的技术差异是B必须再查找一个范围。我认为这是边际差异所以为什么“推荐”A方式?
请注意,jQuery只是示例。重要的是问题的本质:作为参数传递或在函数中检索?
答案 0 :(得分:2)
如果jQuery库的名称实际上是“jQuery”,第二种方式将仅工作。这样调用.noConflict()
是可能的(虽然不寻常):
window.banana = jQuery.noConflict( true );
然后,你的第一个例子仍然有效:
(function($) {
$.doStuff();
})( banana );
但你的第二个例子会失败(如书面所示)。当然,您也可以类似地将“banana”这个名称硬编码到第二个名称中,但如果该功能不是由您直接控制,则不能;加上它是“干”违规。
想象一下,你有一个初始化函数被加载到一个单独的JavaScript源文件中;也许这是第三方剧本。如果你想在初始化时调用该函数,如果函数将jQuery引用作为参数而不仅仅假设全局符号是特定的,那么你将具有更大的灵活性。
alienInitializationFunction( banana );
换句话说,仍然有用。
答案 1 :(得分:1)
两者都是等价的,但我更喜欢第一个例子(作为参数传递),因为它为您节省了一行代码。这也意味着你的函数不包含不必要的逻辑。