我是 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/