关于javascript:”call”/”apply”到底在这里做什么?

what exactly is “call”/“apply” doing here?

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
     each: function( object, callback, args ) {
   ...
          if ( callback.apply( object[ name ], args ) === false ) {
            break;
          }
 ...
          if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
            break;
          }


    return object;
  }

你可以忽略代码,也许……它的jquery.jquery中的每个实现

我想知道这条线是干什么的callback.apply( object[ name ], args ) === falsecallback.call( object[ name ], name, object[ name ] ) === false

我的意思是这些构造试图检查什么条件?


callback.apply( object[ name ], args )只是调用函数callback,其中object[name]作为上下文(thisargs作为参数。jquery提供了一种通过返回false来中断循环的方法,如文档中所述:

We can break the $.each() loop at a particular iteration by making the callback function return false. Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.

所以,这段代码:

1
2
3
if ( callback.apply( object[ name ], args ) === false ) {
  break;
}

检查函数是否返回false,如果返回,则中断循环。

如果跳过上下文部分,代码可能如下所示(在ES6中):

1
2
3
if (callback(...args) === false) {
  break;
}