0

我在使用 Meteor 时遇到了一些奇怪的行为。

我在 client/ 中定义的模板助手中。函数“percentCompleted”是定义在 client/lib/helper.js 中的辅助函数。当我在返回行中调用“percentCompleted”时,percentCompleted 正常完成。但是,每当我在返回行之外调用 percentCompleted 时,控制台都会记录一个错误,即函数“percentCompleted”未定义。为什么要根据模板助手中调用它的位置来定义或未定义助手函数?

这有效:

Template.chapter.percentComplete = function(){
  if(_.isEmpty(this))
    return "";

  return percentCompleted(this)
}

这会引发“percentCompleted”未定义的错误。

Template.chapter.percentComplete = function(){
  if(_.isEmpty(this))
    return "";

  var percentCompleted = percentCompleted(this)  

  return percentCompleted;
}
4

1 回答 1

0

问题是您有一个称为percentCompleted遮蔽函数的局部变量percentCompleted。将变量重命名为其他名称,它应该可以工作。

请注意,Javascript 中的局部变量声明被提升到函数的顶部,因此它的行为就像您编写的那样:

Template.chapter.percentComplete = function(){
  var percentCompleted;
  if(_.isEmpty(this))
    return "";

  // Here we attempt to call the function in the percentCompleted
  // var, but that is undefined.
  percentCompleted = percentCompleted(this)  

  return percentCompleted;
}
于 2014-06-23T10:05:25.743 回答