Javascript 在闭包中定义变量还是在本地定义变量,哪个更快?

Javascript 在闭包中定义变量还是在本地定义变量,哪个更快?,javascript,closures,Javascript,Closures,我用画布绘制了一些基本的图形,jcanvas正在进行: this.div.bind("mousedown", function(ev) { ev.preventDefault(); ev.stopPropagation(); var point= []; var pX, pY; point[0]= (ev.pageX- this.offsetLeft); point[1]= (ev.pageY- th

我用画布绘制了一些基本的图形,jcanvas正在进行:

this.div.bind("mousedown", function(ev) {
        ev.preventDefault();
        ev.stopPropagation();
        var point= [];
        var pX, pY;
        point[0]= (ev.pageX- this.offsetLeft);
        point[1]= (ev.pageY- this.offsetTop);
        that.div.bind("mousemove", function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
            pX= (ev.pageX- this.offsetLeft);
            pY= (ev.pageY- this.offsetTop);
            that.canvas.drawLine({
                strokeStyle: "#000",
                strokeWidth: 10,
                rounded: true,
                x1: point[0], y1: point[1],
                x2: pX, y2: pY,
            });
            point[0]= pX;
            point[1]= pY;
        });

        that.div.bind("mouseup", function(ev) {
            ev.preventDefault();
            ev.stopPropagation();
            that.div
                .unbind('mousemove')
                .unbind('mouseup');
        });
    }); 
注意到我在mousedown事件中声明了pX和pY,使它们可以作为绑定到mouseover事件的内部函数的闭包进行访问。我想知道什么会更快,在mouseover事件中声明它们还是现在这样

一方面,在外部声明这两个变量意味着调用mouseover事件时分配的变量会更少(这是很多次),另一方面,实际访问这些变量意味着我需要在两个不同的范围内查找它们


我想知道Javascript中哪个操作比较慢。我的直觉是,如果Javascript引擎对局部变量使用基于堆栈的分配,那么分配应该慢得多,但我不确定。

对自己进行基准测试不是件小事吗?请访问jsperf.com这类网站。如果没有人对这件事有更深入的了解,我实际上计划自己进行基准测试。我会等几天,如果我没有得到任何回应,我会在这里发布我的发现。因此,一方面,你会受到创建局部变量(更准确地说,是当前环境记录中的名称绑定)的惩罚,另一方面,你会受到访问父范围(环境记录)的惩罚。找到答案的唯一方法是对其进行基准测试。你可以自己做,或者这里有人可以帮你做,但我不认为没有基准测试,任何人都能知道这一点。我的猜测是,创建变量的效果更好——特别是,因为您在处理程序中多次访问变量。