- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在研究 jQuery 最佳实践并找到了 this文章 by Greg Franko
通常,我会:
$("document").ready(function() {
// The DOM is ready!
// The rest of the code goes here
});
但文章推荐使用:
// IIFE - Immediately Invoked Function Expression
(function($, window, document) {
// The $ is now locally scoped
// Listen for the jQuery ready event on the document
$(function() {
// The DOM is ready!
});
// The rest of the code goes here!
}(window.jQuery, window, document));
// The global jQuery object is passed as a parameter
我能看到那里的评论,但我不明白它到底在说什么。
那么,哪种方法更好,为什么?
我知道这两种方法都有效,但第二种方法如何变得更好?
最佳答案
立即调用的函数表达式 (IIFE)
IIFE 是一种理想的解决方案,可用于在本地确定全局变量/属性的范围,并保护您的 JavaScript 代码库免受外部干扰(例如第三方库)。如果你正在编写将在许多不同环境中运行的 jQuery 代码(例如 jQuery 插件),那么使用 IIFE 来局部作用于 jQuery 是很重要的,因为你不能假设每个人都使用 $ 作为 jQuery 的别名。以下是您的操作方法:
// IIFE - Immediately Invoked Function Expression
(function($, window, document) {
// The $ is now locally scoped
// The rest of your code goes here!
}(window.jQuery, window, document));
// The global jQuery object is passed as a parameter
如果您不想滚动到源文件的底部来查看您传递给 IIFE 的全局变量/属性,您可以这样做:
// IIFE - Immediately Invoked Function Expression
(function(yourcode) {
// The global jQuery object is passed as a parameter
yourcode(window.jQuery, window, document);
}(function($, window, document) {
// The rest of your code goes here!
}
));
要了解有关 IIFE 的更多信息,您可以阅读我的博文,标题为 I Love My IIFE .
jQuery 就绪事件
许多开发人员将他们的所有代码包装在 jQuery 就绪事件中,如下所示:
$("document").ready(function() {
// The DOM is ready!
// The rest of your code goes here!
});
或者像这样更短的版本:
$(function() {
// The DOM is ready!
// The rest of your code goes here!
});
如果您正在执行上述任一模式,那么您应该考虑将不依赖于 DOM 的应用程序部分(例如方法)移到就绪事件处理程序之外。像这样:
// IIFE - Immediately Invoked Function Expression
(function(yourcode) {
// The global jQuery object is passed as a parameter
yourcode(window.jQuery, window, document);
}(function($, window, document) {
// The $ is now locally scoped
$(function() {
// The DOM is ready!
});
// The rest of your code goes here!
}
));
这种模式使得更容易分离您的逻辑(从代码设计的 Angular 来看),因为并非所有内容都必须包含在单个事件处理程序回调函数中。它还将提高应用程序的页面加载性能,因为并非所有内容都需要立即初始化。一个很好的例子是惰性绑定(bind) DOM 事件处理程序,当 DOM 准备就绪时不需要绑定(bind)。
改编 self 的 jQuery 最佳实践博文:http://gregfranko.com/blog/jquery-best-practices/
关于javascript - $ ('document' 情况下的 jQuery 最佳实践)。就绪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307078/
嗨,这是我在这里的第一个问题,所以如果由于某种原因不遵守规则,结果是重复的或其他什么,请友好地告诉我(并不是说我首先会失去任何声誉) 无论如何,关于 Java 提供的此类 StringReader,我
我继承了这段代码,它似乎不是最优的,而且可能不正确,因为它在窗口和文档对象上添加了事件监听器。但是,除黑莓5.0外,它都可以正常工作。有人可以解释一下所有这些设置是否正确,或者是否有任何建议可以使其更
我被要求在第三方网站上执行维护,我可以编辑 JavaScript,但不能编辑后端代码。该站点使用一个插件,可以在 jQuery.ready 调用中设置各种样式和事件。我想停止它而不引起错误。我可以在模
在下面的代码片段中: Get Started! $(document).ready(function() { $('#indexGet
我有一个包含多个 html 文件的 phonegap 应用程序,对于每个 html 文件,我都有 js.file。在每个 js 文件中,我都添加了一个 eventListener,如下所示: func
您好,我正在尝试创建一个书签,它会打开一个网页,在该网页上找到一个下载链接,然后关闭该网页。除非有更好的方法,否则我将打开页面,调用 ready(我认为这是无效的部分),然后搜索下载链接。导入jQue
关于我的问题:Validate dynamically added control 我们是否应该始终在 javascript 上使用 ready 函数? 最佳答案 一个人应该只有在保证这样的操作有效并
以下两种情况给我相同的行为。但是技术上有什么区别? (我把下面的代码放在正文中脚本标签的最后一部分。) $(document).ready(function() { $('.collapse').
我的程序使用共享内存作为数据存储。此数据必须可供任何正在运行的应用程序使用,并且必须快速获取此数据。但是一些应用程序可以运行在不同的 NUMA 节点上,并且它们的数据访问非常昂贵。每个 NUMA 节点
我有一个 控制台 .net 核心中的应用程序。 如何实现 Kubernetes 就绪/活跃度探测? 我的应用程序循环处理rabbitmq 消息,并且不监听任何http 端口。 最佳答案 对于这种情况,
在嵌入式系统上使用ALSA捕获时,我仍然遇到问题。 使用snddevices脚本后,我现在可以从库中打开设备。但是在每次调用大约10秒钟后,应用程序在Input/output error调用上返回错误
我想知道如何在 Facebook 应用程序的 FBJS 中使用 $(document).ready 或类似的东西。我尝试了 $(document).ready 但它不起作用。我也找不到任何相关文件..
我在 $('document').ready 中定义了一个函数。 $('document').ready(function() { function visit(url) { $.ajax
下面是一个简单的测试用例来演示我正在尝试做的事情: Test $(document).ready(function() { $(":target").css('color', 'r
使用 ember cli v0.1.4、ember 1.8.1 和 cordova 3.7,我正在使用初始化程序等待设备准备就绪; var CordovaInitializer = { name:
我正在研究 jQuery 最佳实践并找到了 this文章 by Greg Franko 通常,我会: $("document").ready(function() { // The DOM i
这个问题已经有答案了: What is the scope of variables in JavaScript? (27 个回答) 已关闭 5 年前。 我想在 $(document).ready(x
我成功地使用 gce ingress 使用 GKE 创建了一个集群。但是 Ingress 需要很长时间才能检测到服务是否就绪(我已经设置了 livenessProbe 和 readinessProbe
我不确定我在这里问的问题是否正确,但基本上我是用ajax请求插入html: // data-active_chart if ($("#charts").attr("data-active_chart"
我正在使用 Foundation CSS 框架,它在页脚中加载 jQuery。这不是非典型做法,也是许多人推荐的做法。但是,我需要在页面中编写脚本。使用 document ready 应该可以解决问题
我是一名优秀的程序员,十分优秀!