Javascript 为什么是';中断';不允许在JS forEach中使用函数?
我已经读了很多书,看到了很多关于这个主题的不同问题,但是我想知道我是否可以得到帮助,为什么打破一个For-Each循环不起作用。另外,我是个新手,所以如果这个问题的答案与我不理解的不同,我会提前道歉 到目前为止,我已经编写了一个forEach函数来模拟本机的.forEach方法:Javascript 为什么是';中断';不允许在JS forEach中使用函数?,javascript,foreach,Javascript,Foreach,我已经读了很多书,看到了很多关于这个主题的不同问题,但是我想知道我是否可以得到帮助,为什么打破一个For-Each循环不起作用。另外,我是个新手,所以如果这个问题的答案与我不理解的不同,我会提前道歉 到目前为止,我已经编写了一个forEach函数来模拟本机的.forEach方法: function forEach(collection, callback){ if(collection.isArray){ for(var i =0;i<collection.length&
function forEach(collection, callback){
if(collection.isArray){
for(var i =0;i<collection.length&&callback(collection[i])!==false;i++){
callback(collection[i]);
}
}else{
for(var key in collection){
callback(collection[key]);
}
}
}
我已经能够重新创建我想要使用其他函数的效果,但是我想理解为什么这不起作用,因为我正在学习如何在其他函数中实现函数的使用
多谢各位 考虑此代码段中的
条的行为:
function foo(x) {
return x;
}
function bar() {
foo(1);
foo(2);
return 3;
}
console.log(bar());
它调用foo
,后者返回,但它将控制权返回到bar
本身,而不是bar
的调用者,因此记录3
如果我们将foo
的定义放在bar
中,情况不会改变:
function bar() {
function foo(x) {
return x;
}
foo(1);
foo(2);
return 3;
}
console.log(bar());
如果我们接受它作为参数,它也不会改变:
function foo(x) {
return x;
}
function bar(baz) {
baz(1);
baz(2);
return 3;
}
console.log(bar(foo));
当我们使用函数表达式时,行为不会改变,或者:
function bar(baz) {
baz(1);
baz(2);
return 3;
}
console.log(bar(function(x) {
return x;
}));
因此,return
没有像您期望的那样从传递给forEach
的函数中工作,原因是return
保留了从函数返回的通常含义,它不是从词汇上包含该函数的函数中返回的。类似地,break
是非法的,因为它不在循环中;它在一个函数中(以后只在循环中调用)。对于数组,集合。isArray
是未定义的。您应该将其替换为Array.isArray(collection)
对于非数组类型,您没有检查从函数返回的callback(collection[key])
的返回值-为什么您希望这会对For循环产生任何影响?顺便说一句,你的函数会隐式返回一个,
,即使你省略了这个词。Break只为规范中的循环、开关或标签定义。非常感谢这个答案——用很好的例子写得非常简洁明了。
function bar(baz) {
baz(1);
baz(2);
return 3;
}
console.log(bar(function(x) {
return x;
}));