javascript - 处理javascript中的循环,只有最后一项受到影响?

标签 javascript closures

<分区>

我正在使用处理图像处理的 gm npm 模块。我有这段代码。

for(i=0;i < 4;i++){
    gm("www/img/" + image[i]).crop(550, 406, 0, 0).write(function(err) {
         console.log(this.outname + " created  ::  " + arguments[3]); //success
    });
}

此循环旨在遍历图像数组并裁剪每张照片,但它只裁剪最后一张。我认为它可以执行函数调用和回调,但还没有达到那个级别。

最佳答案

将您的代码更改为:

for (var i = 0; i < 4; i++) {
  (function (i) {
    gm("www/img/" + image[i]).crop(550, 406, 0, 0).write(function(err) {
         console.log(this.outname + " created  ::  " + arguments[3]); //success
    });
  }).call(this, i);
}

否则每次调用您的回调时,i 的值都将为 3。

关于javascript - 处理javascript中的循环,只有最后一项受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438002/

相关文章:

javascript - 在 Javascript 中编码字符串并显示字符串输出

javascript - 如何从网站复制文本并在我自己的 HTML 文件中使用它

javascript - getElementsByTagName 返回 null 值(但在 Debug模式下工作得异常正常)

regex - 如何使用 Groovy 的 replaceFirst 和闭包?

swift - swift 中的通用协议(protocol)函数和左值

java - 如何将闭包从 groovy 导入到 java?

Javascript "private"与实例属性

javascript - 如何记住未提交的表单数据?

javascript - 通过选择显示下一个字段集

C++ 闭包 hack