- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个关于 explaining JavaScript closures to six-year olds 的很棒的 stackoverflow 问题.
这个问题有许多非常有用的答案。答案之一涉及 Closures at the Mozilla Developer Network JavaScript guide 的条目,它确实提供了一个简洁且易于理解的解释(具体来说,闭包存储一个函数及其环境)。
但是,实用闭包下的 MDN 条目让我感到困惑......具体来说,在他们的示例中哪里需要闭包来调整文本大小?有人可以帮我解释一下为什么他们需要关闭 makeSizer 函数吗?
作为一名初学者程序员,我只能假设我的不使用闭包的替代方案(如下所示)在某种程度上是幼稚且不正确的(尽管看起来更简洁和高效)?
我对文本大小关闭的理由特别感兴趣,MDN 条目如下:
It is unwise to unnecessarily create functions within other functionsif closures are not needed for a particular task, as it willnegatively affect script performance both in terms of processing speedand memory consumption.
HTML(根据MDN原文修改)
<p>Some paragraph text</p>
<h1>some heading 1 text</h1>
<h2>some heading 2 text</h2>
<a href="#" class="sizer">12</a>
<a href="#" class="sizer">14</a>
<a href="#" class="sizer">16</a>
CSS(未修改)
body {
font-family: Helvetica, Arial, sans-serif;
font-size: 12px;
}
h1 {
font-size: 1.5em;
}
h2 {
font-size: 1.2em;
}
JavaScript(已修改)
(function makeSizer() {
var sizers = document.getElementsByClassName('sizer');
for (var i = 0; i < sizers.length; i++) {
sizers[i].onclick = function () {document.body.style.fontSize = this.innerHTML + "px";};
}; // close for...
})(); // close makeSizer;
JSFiddle (alternative to the original from MDN)
function makeSizer(size) {
return function() {
document.body.style.fontSize = size + 'px';
};
}
var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);
最佳答案
它主要用于防止对象污染全局空间。在闭包中,您可以将变量设置为本地变量和内部“实现”细节。闭包的主要好处实际上是能够创建私有(private)范围。
这里提出的性能论点确实与这个级别的微观优化有关,而不是一个实际问题。
关于JavaScript 闭包 : MDN Practical Closures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26478177/
我不明白 MDN javascript 语法文档中所有这些括号的含义。 例如,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refer
我正在关注MDN's Object Building Practice tutorial ,尝试使用 ES6 类声明来完成本教程。 我的程序中的弹跳球移动速度比教程大纲快得多。我已经设置了新创建的 B
我正在从 MDN 学习 CSS,我遇到了一些我无法理解的东西。下面的链接提到了“在下面的例子中,祖先 div(框一)是相对定位的(所以它变成最近定位的祖先)和盒子二绝对定位:“但我无法弄清楚盒子一是盒
我正在尝试安装一个附加组件,但它显示无法安装 oneextension,因为它与 Firefox 11 不兼容,但它是(我编写的)。 这是安装.rdf onextension@s
MDN(Mozilla Developer Network)网站如何更改上下文菜单? 例如,this page . 我以为他们创建了整个上下文菜单,以便在触发上下文菜单事件时调用它,但这似乎有点疯狂。
我关注了MDN's webRTC still photo capture在我自己的程序中。两个月前效果很好。今天,在尝试同一个程序时,我发现无法显示来自网络摄像头的视频输入。事实上,MDN提供的dem
在 Mozilla 开发者网络页面上,有一个示例,您可以在 getImageData() 的帮助下创建颜色选择器。您可以在https://developer.mozilla.org/en-US/doc
有人可以详细解释一下这个片段吗 var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; var countedNames = names.red
伙计们,我想了解为什么 call 真的有效,我是面向对象的 java 脚本、this 关键字和 call 等函数的新手。 我在一个在线程序中找到了下面一行: this.tabs = [].slice.
所以我正在查看 JavaScript MDN 重新介绍教程,并谈到了浮点不精确这一点。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/
关于 MDN topic for closures,他们将此示例作为“真实世界”应用程序展示。 body { font-family: Helvetica, Arial, sans
我正在尝试来自 Mozilla 开发者网络 ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to
我正在 MDN 网站上阅读 JavaScript 重新介绍,并在数组部分看到了这个示例: for (var i = 0, item; item = a[i++];){ // Do somethi
我在 MDN CSS 上看到以下新闻元素主页: Gecko's support of flexible boxes has been adapted to match a recent specifi
我在web上做了一点工作,有时候要回过头去看看MDN里的一些属性或者方法,但是在浏览器支持部分发现了一些看不懂的数字,有希望了在这里得到一些帮助。 我知道浏览器中的绿色框表示它支持它,但我在其中看到一
这个问题在这里已经有了答案: How to interpret function parameters in software and language documentation? (4 个答案)
这显然不是这种情况,因为每个元素都可以有自己的默认值。 看这里: https://developer.mozilla.org/en-US/docs/Web/CSS/display Initial va
我在 MDN CSS 上看到以下新闻元素主页: Gecko's support of flexible boxes has been adapted to match a recent specifi
我已阅读 the MDN page on the "Object.is" method .它为不提供此方法的浏览器提供了替代代码: if (!Object.is) { Object.is =
据我所知 JavaScript,基于原型(prototype)而不是类的 OOP 不考虑接口(interface),而是依赖于鸭子类型。 然而,我经常可以在 MDN 在线文档中看到一些描述为“接口(i
我是一名优秀的程序员,十分优秀!