首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >争论进入生活

争论进入生活
EN

Stack Overflow用户
提问于 2013-12-29 23:33:12
回答 2查看 525关注 0票数 3

有没有人能解释和证明哪一个例子“更正确”?

A:将对象作为参数传递

代码语言:javascript
运行
复制
(function($){
    $.doStuff();
})(jQuery);

B:在函数中检索对象

代码语言:javascript
运行
复制
(function(){
    var $ = jQuery;
    $.doStuff();
})();

我真的很喜欢B,因为它的可读性。A和B之间唯一的技术区别是B必须多查找一个范围。我认为这是微乎其微的差别,那么为什么“重获”是A的方式呢?

注意,jQuery只是一个例子。问题的本质是重要的:作为参数传递还是在函数中检索?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-30 09:21:37

两者都是等价的,但我更喜欢第一个示例(作为参数传递),因为它节省了一行代码。这也意味着您的函数不包含不必要的逻辑。

票数 1
EN

Stack Overflow用户

发布于 2013-12-29 23:36:05

第二种方法只有在jQuery库的名称真正为"jQuery“时才能工作。像这样调用.noConflict()是可能的(虽然不寻常):

代码语言:javascript
运行
复制
window.banana = jQuery.noConflict( true );

那么,您的第一个示例仍然有效:

代码语言:javascript
运行
复制
(function($) {
  $.doStuff();
})( banana );

但是您的第二个示例将失败(如所写的)。当然,你也可以把“香蕉”这个名字硬编码到第二个,但是如果这个函数不是直接在你的控制之下,你就不能;而且这也是一个“干”的违规行为。

假设您已经在一个单独的JavaScript源文件中加载了一个初始化函数;也许它是一个第三方脚本。如果您想在初始化时调用该函数,那么如果函数将jQuery引用作为参数,而不是仅仅假设全局符号是任何特定的东西,那么您将具有更大的灵活性。

代码语言:javascript
运行
复制
alienInitializationFunction( banana );

还是会起作用的换句话说。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20831296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档