javascript - meteor 变量范围

标签 javascript variables scope meteor each

我是 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?
   })
  }
})

我的印象是在我的 .each 函数之外声明的任何变量都可以在它内部使用?但是我没有定义。这是 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 和 Underscore 的 _.each()。其一,jQuery 有不同的参数顺序(注意我在代码中切换了参数的顺序)。一般来说,我建议将 Underscore 用于与集合相关的功能,并将 jQuery 主要用于 DOM 操作。

关于javascript - meteor 变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23257008/

相关文章:

javascript - AngularJS 取消绑定(bind)等效变量

haskell - 匿名函数的范围可见性

JavaScript 简单的 "error-handling"通过用条件替换 NaN

php - 如何检查 PHP 变量是否包含非数字?

mysql - 将 mysql 用户定义变量与 group by 条件一起使用

php - 将两个变量合并为一个

django - self.scope ['user' ] 在 Django channel 中一直显示为 AnonymousUser

javascript - 是否有用于数组多行检查的 eslint 规则?

javascript - 如何使用 Knockout.js 在数组中绑定(bind)子数组?

javascript - JSLint - 外部脚本文件导致的 'var not defined' 错误