在这个非常巧妙的例子中,我有一个包含3个元素的数组,我使用.each()
方法遍历了它。
var vals = $w('foo bar baz');
vals.each( function(val) {
alert(val);
if( val == 'bar' ) {
//This exits function(val)
//but still continues with the .each()
return;
}
});
如果需要,我可以很容易地从.each()
调用的函数中返回。
我的问题是,如何从.each()
.each()
调用的函数内部跳出循环?
发布于 2009-06-25 18:25:40
if( val == 'bar' ) {
throw $break;
}
它在你链接的同一页上有说明。这是一个由each函数专门处理的异常。当抛出时,它会阻止对其他元素调用您的函数。
发布于 2009-06-25 18:26:07
您是对的,Prototype已经创建了一个对象($break),可以从each-function抛出该对象来启用此功能。根据原型API文档:
在JavaScript中,可以使用break和continue语句缩短
常规循环。但是,在使用迭代器函数时,您的代码在循环范围之外:循环代码发生在幕后。
为了向您提供等效的(尽管不是最优的)功能,Prototype提供了两个全局异常对象,$break和$continue。抛出这些函数相当于在普通循环中使用相应的原生语句。这些异常由each方法在内部正确捕获。
另外,请注意$continue对象已被弃用,要模拟continue语句,请使用普通的return语句。
代码示例:
var result = [];
$R(1,10).each(function(n) {
if (0 == n % 2)
return; // this equals continue
if (n > 6)
throw $break;
result.push(n);
});
// result -> [1, 3, 5]
您可以在此处阅读有关每个函数的更多信息:http://www.prototypejs.org/api/enumerable/each
发布于 2009-06-25 18:26:18
根据您链接到的.each()
文档,您应该使用throw $break;
语句,这应该会导致进一步的迭代停止。
简单地返回将导致迭代器继续执行下一步。
https://stackoverflow.com/questions/1045452
复制相似问题