相关疑难解决方法(0)

Javascript:语句和表达式之间的区别?

我之前问了这个问题,在仔细考虑了这个话题之后,我开始想知道"陈述"和"表达"这两个词之间看似模糊的界限在哪里.所有陈述都是表达式吗?REPL控制台中的返回值来自哪里?它们似乎并不总是具有直观意义.当然,如果你输入1+1,你会得到2,但有时候它的逻辑并不明显.

鉴于在REPL中输入的任何内容都会产生一些价值,这是否意味着它可以在JS源代码中用作表达式和独立语句?

可以_X_在以下代码段中使用的代码串也可用于_Y_反之亦然?if(_X_) _Y_

javascript expression terminology semantics

54
推荐指数
8
解决办法
2万
查看次数

DOM:为什么这是内存泄漏?

请考虑Mozilla Docs关于JavaScript内存泄漏的这句话:

function addHandler() {
    var el = document.getElementById('el');
    el.onclick = function() {
        this.style.backgroundColor = 'red';
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将元素设置为在单击时变为红色.它还会造成内存泄漏.为什么?因为对el的引用无意中被捕获到为匿名内部函数创建的闭包中.这将在JavaScript对象(函数)和本机对象(el)之间创建循环引用.

请以简单明了的方式解释上述泄漏的原因,我没有得到确切的观点.

由于泄漏,网站/页面是否面临安全问题?我该如何避免它们?其他什么代码会导致内存泄漏?如何判断内存泄漏的时间?

我是内存泄漏主题的绝对新手.有人可以一步一步地为我澄清这些东西吗?还有人可以帮我澄清这句话"这会在JavaScript对象(函数)和本机对象(el)之间创建一个循环引用."

javascript internet-explorer garbage-collection memory-leaks circular-reference

30
推荐指数
2
解决办法
2996
查看次数

编译器和解析器之间的区别?

通过概念/功能/实现,编译器和解析器之间有什么区别?

compiler-construction parsing

20
推荐指数
4
解决办法
2万
查看次数

在setTimeout中使用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();)

javascript mootools closures settimeout

9
推荐指数
1
解决办法
5202
查看次数

本地Javascript范围问题

如果我这样做:

var a = 0;

(function () {
    var a = a; //want to make local a = global a
    ++a;
    console.log("fn",a);
})();

console.log(a);?
Run Code Online (Sandbox Code Playgroud)

输出是:

fn NaN
0
Run Code Online (Sandbox Code Playgroud)

为什么a自执行功能内部变成了NaN

我知道如果我做的话它可以正常工作:

(function () {
    var b = a;
    ++b;
    console.log("fn",b); // fn 1
})();
Run Code Online (Sandbox Code Playgroud)

但是,如果我采用第一个版本的方式,那就有NaN问题了.

为什么会这样?

javascript scope

8
推荐指数
2
解决办法
435
查看次数