我是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。
感谢。
答案 0 :(得分:3)
问题似乎是您尝试使用each()
上不存在的Array.prototype
方法。我相信你正在寻找Array.prototype.forEach()
。下划线的_.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操作。