栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么定义一个匿名函数并将jQuery作为参数传递给它?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么定义一个匿名函数并将jQuery作为参数传递给它?

您显示的两个代码块在执行时间和执行原因上有很大不同。它们不是彼此排斥的。它们的目的不同。

Javascript模块

(function($) {  // Backbone pre in here})(jQuery);

这是一个“ Javascript模块”模式,通过立即调用功能实现。

该代码的目的是为您的代码提供“模块化”,保密性和封装性。

此功能的实现由调用

(jQuery)
括号立即调用。将jQuery传递到括号中的目的是为全局变量提供局部范围。这有助于减少查找
$
变量的开销,并在某些情况下允许优化器进行更好的压缩/优化。

立即调用功能会立即执行。功能定义一完成,功能即被执行。

jQuery的“ DOMReady”功能

$(function(){  // Backbone pre in here});

当DOM准备由您的Javascript代码操纵时,将执行jQuery的“ DOMReady”函数。

模块中的模块与DOMReady

在jQuery的DOMReady函数中定义Backbone代码是一种不好的形式,并且可能会损害您的应用程序性能。在DOM加载并准备好操作之前,不会调用此函数。这意味着您要等到浏览器至少解析一次DOM之后再定义对象。

最好在DOMReady函数之外定义Backbone对象。除其他外,我更喜欢在Javascript模块模式内执行此操作,以便为代码提供封装和隐私。我倾向于使用“显示模块”模式(请参见上面的第一个链接)来提供对模块外部所需位的访问。

通过在DOMReady函数之外定义对象并提供引用它们的方式,可以使浏览器抢先处理Javascript,从而有可能加快用户体验。这也使代码更加灵活,因为您可以随意移动事物,而不必担心在移动事物时创建更多的DOMREady函数。

即使您在其他地方定义了Backbone对象,您仍然可能仍将使用DOMReady函数。原因是许多Backbone应用程序需要以某种方式操作DOM。为此,您需要等待DOM准备就绪,因此,在定义应用程序之后,需要使用DOMReady函数来启动您的应用程序。

您可以在网上找到很多这样的示例,但这是一个非常基本的实现,同时使用Module和DOMReady函数:

// Define "MyApp" as a revealing moduleMyApp = (function(Backbone, $){  var View = Backbone.View.extend({    // do stuff here    });  return {    init: function(){      var view = new View();      $("#some-div").html(view.render().el);    }  };})(Backbone, jQuery);// Run "MyApp" in DOMReady$(function(){  MyApp.init();});


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430295.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号