我在CoffeeScript中具有以下For Of循环,该循环遍历对象的属性:

for buildingFrame of buildingNames
  $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)


似乎只有buildingFrame的最后一个值传递给对@displayProperties的每次调用。在搜索该网站时,我发现这里的原因是:Possible Answer


之所以只使用循环中的最后一个值,是因为JavaScript是一种后期绑定语言,并且循环不会引入新的作用域。可以通过以下方式在JavaScript中给出解决此问题的解决方案:

for(var i=0; i<barValues.length; i++) function(i){
  ...
}(i);


我已经尝试对上面的coffeScript使用此解决方案来尝试解决以下问题:

for buildingFrame of buildingNames => (buildingFrame)
  $("#bt-#{buildingFrame}").click () => @displayProperties(buildingFrame)
(buildingFrame)


但这只是给我的编译器错误。有人请告诉我如何在CS中解决此问题。谢谢大家!

最佳答案

这样的事情怎么样?

for buildingFrame of buildingNames
  do (buildingFrame) =>
    $("#bt-#{buildingFrame}").click => @displayProperties(buildingFrame)


它将编译为以下JavaScript:

_fn = function(buildingFrame) {
  return $("#bt-" + buildingFrame).click(function() {
    return _this.displayProperties(buildingFrame);
  });
};

for (buildingFrame in buildingNames) {
  _fn(buildingFrame);
}

07-28 13:15