您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
我想为数组中的所有对象添加一个键:value参数.
例如:
var arrOfObj = [{name: 'eve'},{name:'john'},{name:'jane'}];
Run Code Online (Sandbox Code Playgroud)
现在我想为所有对象添加一个新参数isActive,以便生成的数组看起来像.
例如:
[{
name: 'eve',
isActive: true
}, {
name: 'john',
isActive: true
}, {
name: 'jane',
isActive: true
}]
Run Code Online (Sandbox Code Playgroud)
我总是可以遍历数组并插入一个键值对.但是想知道是否有更好的方法
我是JavaScript的新手,但我对闭包的工作原理感到困惑.有人可以用非专业人的术语解释它们是什么或为什么它们有用吗?
我正在使用setTimeout模拟渲染,我来到这样的结构:
var Renderer = new Class (
{
Implements: Events,
initialize()
{
this.onRender();
},
onRender: function()
{
// some rendering actions
setTimeout(this.onRender.bind(this), 20);
}
});
Run Code Online (Sandbox Code Playgroud)
由于闭包的无限嵌套,该代码是否存在潜在的内存泄漏?或者一切都好吗?我到目前为止唯一的解决方案是将其重写为常规
function Renderer()
{
var onRender = function()
{
// rendering
setTimeout(onRender, 20);
};
onRender();
};
Run Code Online (Sandbox Code Playgroud)
但我不想失去Mootools活动和课程.由于某些原因,我不能使用"singleton"(如window.renderer = new Renderer();)
作为自 Chrome 68 起的一个选项(自 Chrome 72 或更早版本起默认启用),DevTools 控制台会在您键入时对某些表达式进行“热切求值”结果预览。
例如,如果您输入
encodeURIComponent(document.querySelector('.top-bar .-logo').innerHTML);
Run Code Online (Sandbox Code Playgroud)
您会看到粉红色的预览
"%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3Cspan%20class%3D%22-img%20_glyph%22%3EStack%20Overflow%3C%2Fspan%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20"
Run Code Online (Sandbox Code Playgroud)
如下,无需按 Enter 键。
然而,这不起作用,例如
document.querySelector('.top-bar .-logo').href;
Run Code Online (Sandbox Code Playgroud)
并且(正如预期的那样)它不适用于包含循环的表达式。
是否在某个地方准确记录了哪些表达式适用于此,哪些不适用?该功能的最初公告提到
DevTools 不会立即评估表达式是否会产生副作用。
但这似乎并不能解释为什么它适用于.innerHTML但不适用.href。
到底是什么决定了它将尝试计算哪些表达式?
javascript ×5
closures ×3
arrays ×1
function ×1
mootools ×1
scope ×1
settimeout ×1
variables ×1