Javascript 引用“this”是否比上下文对象快?
我正在为画布渲染器重写一个类构造函数,使其仅为一个类。我认为这个项目不需要多个画布。通过“this”引用类是否比在其函数中引用其名称更快?我知道引用闭包上下文比引用全局上下文要快,但我很好奇这是作为全局上下文还是上下文的一部分存在 以下是我的课程供参考:Javascript 引用“this”是否比上下文对象快?,javascript,Javascript,我正在为画布渲染器重写一个类构造函数,使其仅为一个类。我认为这个项目不需要多个画布。通过“this”引用类是否比在其函数中引用其名称更快?我知道引用闭包上下文比引用全局上下文要快,但我很好奇这是作为全局上下文还是上下文的一部分存在 以下是我的课程供参考: canvasObj = { //canvas initialiser init: function(){ this.el=document.getElement; this.c=this.el.getC
canvasObj = { //canvas initialiser
init: function(){
this.el=document.getElement;
this.c=this.el.getContext('2d');
this.objs=[];
this.resetSize();
this.bAnim=false;
console.log("canvas initialised");
},
clear: function(c){ //fills whole canvas with opaque grey, faster than clearRect()
if(!c)this.c.fillStyle="#FFFFFF";
this.c.fillRect(0, 0, this.el.width, this.el.height);
},
resetSize: function(){ //resizes the canvas to window size
this.el.style.width = window.innerWidth + "px";
this.el.style.height = window.innerHeight + "px";
this.el.width = window.innerWidth;
this.el.height = window.innerHeight;
this.w=window.innerWidth;
this.h=window.innerHeight;
this.o=this.w/this.h;
console.log("size changed");
},
update: function(t){ //runs all stored draw functions
var i = this.objs.length, selfRef = this, ts = Date.now();
while(i--){
this.objs[i](ts-this.ts);
}
this.ts=ts;
if(this.bAnim===true)
requestAnimationFrame(function(t){selfRef.update(t);});
},
addDraw: function(fn){ //adds new draw function to stack
this.objs.unshift(fn);
},
startAnim: function(){ //starts drawing loop
var selfRef = this;
this.ts=Date.now();
this.bAnim=true;
requestAnimationFrame(function(t){selfRef.update(t);});
},
stopAnim: function(){ //stops drawing loop
this.bAnim=false;
}
};
使用jsPerf,看看哪个更快。我知道引用闭包上下文比全局上下文更快。函数的参数这是执行上下文的一个参数,它与闭包无关。它只在当前执行上下文中解析,而从不在作用域链上解析。@RobG当我提到闭包上下文时,我更多的是指函数闭包中的局部变量,而不是“this”。因此,据我所知,“this”始终是顶级上下文的一部分,而不仅仅是重新分配的全局属性?@Barmar我知道我可以使用jsPerf,但我感兴趣的是,如果有人知道为什么而不是什么。这不是一个真正的变量——我敢打赌编译器会生成特殊代码来访问上下文对象,而不必经过作用域链。