我之前问了这个问题,在仔细考虑了这个话题之后,我开始想知道"陈述"和"表达"这两个词之间看似模糊的界限在哪里.所有陈述都是表达式吗?REPL控制台中的返回值来自哪里?它们似乎并不总是具有直观意义.当然,如果你输入1+1,你会得到2,但有时候它的逻辑并不明显.
鉴于在REPL中输入的任何内容都会产生一些价值,这是否意味着它可以在JS源代码中用作表达式和独立语句?
可以_X_在以下代码段中使用的代码串也可用于_Y_反之亦然?if(_X_) _Y_ 
请考虑Mozilla Docs关于JavaScript内存泄漏的这句话:
Run Code Online (Sandbox Code Playgroud)function addHandler() { var el = document.getElementById('el'); el.onclick = function() { this.style.backgroundColor = 'red'; } }上面的代码将元素设置为在单击时变为红色.它还会造成内存泄漏.为什么?因为对el的引用无意中被捕获到为匿名内部函数创建的闭包中.这将在JavaScript对象(函数)和本机对象(el)之间创建循环引用.
请以简单明了的方式解释上述泄漏的原因,我没有得到确切的观点.
由于泄漏,网站/页面是否面临安全问题?我该如何避免它们?其他什么代码会导致内存泄漏?如何判断内存泄漏的时间?
我是内存泄漏主题的绝对新手.有人可以一步一步地为我澄清这些东西吗?还有人可以帮我澄清这句话"这会在JavaScript对象(函数)和本机对象(el)之间创建一个循环引用."
javascript internet-explorer garbage-collection memory-leaks circular-reference
我正在使用setTimeout模拟渲染,我来到这样的结构:
var Renderer = new Class (
{
    Implements: Events,
    initialize()
    {
        this.onRender();
    },
    onRender: function()
    {
        // some rendering actions
        setTimeout(this.onRender.bind(this), 20);
    }
});
由于闭包的无限嵌套,该代码是否存在潜在的内存泄漏?或者一切都好吗?我到目前为止唯一的解决方案是将其重写为常规
function Renderer()
{
    var onRender = function()
    {
        // rendering
        setTimeout(onRender, 20);
    };
    onRender();
};
但我不想失去Mootools活动和课程.由于某些原因,我不能使用"singleton"(如window.renderer = new Renderer();)
如果我这样做:
var a = 0;
(function () {
    var a = a; //want to make local a = global a
    ++a;
    console.log("fn",a);
})();
console.log(a);?
输出是:
fn NaN
0
为什么a自执行功能内部变成了NaN?
我知道如果我做的话它可以正常工作:
(function () {
    var b = a;
    ++b;
    console.log("fn",b); // fn 1
})();
但是,如果我采用第一个版本的方式,那就有NaN问题了.
为什么会这样?
javascript ×4
closures ×1
expression ×1
memory-leaks ×1
mootools ×1
parsing ×1
scope ×1
semantics ×1
settimeout ×1
terminology ×1