流星可变范围

Meteor variable scope

本文关键字:范围 流星      更新时间:2023-09-26

我对JavaScript相当陌生,甚至对Meteor也很陌生,我对我所知道的变量范围和现实有点困惑。所以我有了Meteor事件助手:

Template.test.events({
  'click .selector': function (e) {
   e.preventDefault();
   var someArray = [1,2,3,4];
   var someVariable = "jquery slector data";
   console.log(someVariable); //this works as expected
   someArray.each(function(index, el) {
     console.log(someVariable); //not defined?
   })
  }
})

我的印象是,在我的.每个函数之外声明的任何变量都可以在它内部使用?然而,我还没有被定义。这是Meteor特有的东西还是JavaScript?另外,如何在不使变量全局化的情况下,使变量在.each函数中可访问?我不认为在.each循环中定义我的变量是理想的,因为这意味着要多次访问DOM。

谢谢。

问题似乎是您试图使用each()方法,而Array.prototype上不存在该方法。我相信你在找Array.prototype.forEach()。Underscore的_.each(array, callback)方法也可以工作,并且与较旧的浏览器更兼容。

这应该有效:

Template.test.events({
  'click .selector': function (e) {
    e.preventDefault();
    var someArray = [1,2,3,4];
    var someVariable = "jquery slector data";
    console.log(someVariable);
    someArray.forEach(function(val, index) {
      console.log(someVariable);
    });
  }
});

或者,为了兼容性:

   _.each(someArray, function(val, index) {
     console.log(someVariable);
   })

我相信您的困惑源于使用jQuery的$.each()方法,该方法与原生forEach和Undercore的_.each()不同。首先,jQuery有一个不同的参数顺序(请注意,我切换了代码中参数的顺序)。通常,我建议将Undercore用于与集合相关的函数,并将jQuery主要用于DOM操作。