Javascript 局部变量在函数中覆盖在循环中多次运行

Javascript 局部变量在函数中覆盖在循环中多次运行,javascript,variables,local-variables,Javascript,Variables,Local Variables,嘿,我这里有个小问题 问题:如何为函数创建唯一的变量,以便在多次调用时,变量将保存它们应该保存的内容(而不是交换) 请记住,我必须保持它的异步,因为循环会很大,而不异步运行它会严重影响性能 我有一个在画布上绘制项目的函数。然后我在for循环中运行这个函数,根据数组中的一些数据绘制一些画布 如此简化的版本: 函数renderCanvas(画布,dID){ 变量mName、bName、sName、tName; this.layerCounter=mainData[dID]['layerCount']

嘿,我这里有个小问题

问题:如何为函数创建唯一的变量,以便在多次调用时,变量将保存它们应该保存的内容(而不是交换)

请记住,我必须保持它的异步,因为循环会很大,而不异步运行它会严重影响性能

我有一个在画布上绘制项目的函数。然后我在for循环中运行这个函数,根据数组中的一些数据绘制一些画布

如此简化的版本:

函数renderCanvas(画布,dID){
变量mName、bName、sName、tName;
this.layerCounter=mainData[dID]['layerCount'];
调试(设计ID+“有”+层计数器+“层”);
/*第一项为2层,第二项为3层)*/
tctx2.clearRect(0,0,tc2.width,tc2.height);
var imgPath=sName;
imgObj=新图像();
imgObj.src=“img/”+imgPath;
imgObj.onload=函数(){
tctx2.drawImage(imgObj,0,0,w,h,0,0,dw,dh);
层计数器--;
调试(设计ID+“有”+层计数器+“层”);
tctx3.clearRect(0,0,tc2.width,tc2.height);
var imgPath=tName;
imgObj=新图像();
imgObj.src=“img/”+imgPath;
imgObj.onload=函数(){
tctx3.drawImage(talphaObj,0,0,w,h,0,0,dw,dh);
层计数器--;
调试(设计ID+“有”+层计数器+“层”);
};
}
}
对于(变量i=0;i

有什么建议吗?我对编程相当陌生,所以我可能错过了一些非常简单的东西。

点击javascript函数(具有异步行为),如下图所示,您希望使用闭包:

//im assuming contexts array is defined some where up here??

for (var i = 0; i < xArr.length; i++) {
    var cDID = xArr[i];

    //the following function will self execute on each loop
    (function (c, d) {
        //Insert your renderCanvas function body here
        //but use variable c and d in this closure.
        //The values you have passed into this closure
        //are now 'fixed' in this scope and cannot
        //be interfered with by subsequent iterations
    })(contexts[i], cDID);
}});
//我假设上下文数组是在这里的某个位置定义的??
对于(变量i=0;i
基本上,您是在另一个作用域中包装您的函数,以便在now async循环的下一次迭代中,您不能覆盖您的局部变量(我认为这是您提到的“交换”变量的行为)


这很好地解释了javascript闭包,它可能是一个令人困惑的主题

如果是异步的,你想使用闭包,但我不理解你的问题。。您希望为该变量指定什么值?顺便说一句,您的代码中没有声明上下文[i],因为daguru说您的上下文数组没有在任何地方定义?