使用谷歌语言 API 进行批量翻译

3

我正在尝试使用谷歌的AJAX语言API来翻译数组中的每个值。

for(var n=0; n < mytext.length; n++) {
 google.language.translate(mytext[n], originalLanguage, newLanguage, function(result){
  if(!result.error){
   document.getElementById("caption") += mytext[n]+" has been translated to "+result.translation;
  }
 })
}

这段代码可以正确翻译整个数组,但在被google.language.translate调用的成功函数中,n始终等于mycaptions.length。这导致mycaptions[n]返回未定义(例如,“已被翻译为Hola”)。这让我困惑了好几天(为什么回调函数内部的n值总是像您在循环末尾一样???),我猜答案在一个显而易见的编程位上,只是我不明白。

1个回答

1
这与JavaScript中闭包的工作方式有关; 当JavaScript创建闭包时,任何被使用的变量都是被引用而非复制,因此当您构造匿名函数时,它存储对n的引用而非n的值。因此,当它实际被调用时,它将以n的当前值运行(即在循环结束时分配给它的值)。解决方法是创建一个带有参数n并返回闭包的函数:
function createSuccessFunction(n) {
    return function() {
          // behavior on success
    };
}

// use createSuccessFunction(n) where you need a callback

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接