Javascript 为什么是';中断';不允许在JS 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&

我已经读了很多书,看到了很多关于这个主题的不同问题,但是我想知道我是否可以得到帮助,为什么打破一个For-Each循环不起作用。另外,我是个新手,所以如果这个问题的答案与我不理解的不同,我会提前道歉

到目前为止,我已经编写了一个forEach函数来模拟本机的.forEach方法:

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;
}));