2016-02-21 27 views
-3
 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.each實施

我想知道是什麼行做 callback.apply(object[ name ], args) === falsecallback.call(object[ name ], name, object[ name ]) === false

我的意思是所有的條件做這些結構的嘗試去檢查?

+2

你有沒有做過任何研究嗎? 'call'和'apply'不做任何檢查條件。他們稱職能。他們當然在規範中([here](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-function.prototype.call)和[here](http ://www.ecma-international.org/ecma-262/6.0/index.html#sec-function.prototype.apply)),MDN涵蓋了他們[這裏](https://developer.mozilla.org/en -US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)和[這裏](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply) 。 –

回答

1

callback.apply(object[ name ], args)被簡單地調用函數callbackobject[name]作爲上下文(this)和args作爲參數。 jQuery提供了一種方法通過返回false打破循環,如the docs說:

我們可以通過將回調函數的返回false打破在一個特定的迭代$.each()循環。返回非錯誤與for循環中的continue語句相同;它會立即跳到下一個迭代。

所以,這段代碼:如果

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

檢查函數返回false,如果是,打破了循環。


如果我們忽略上下文的一部分,代碼可能看起來像這樣(在ES6):

if (callback(...args) === false) { 
    break; 
} 
+0

啊謝謝..是的,我有基本的瞭解如何調用和應用工作..所以我達到了你似乎告訴的點..但這只是一個jQuery的東西?就像回調只是'return x',並且如果我在數組上做每一個像[true,false,true,false] ..它運行在完整的數組上,並且最初不會中斷'false' –

+0

ok,所以我查看了'。每個'..所以這意味着什麼......這個'call'等於'false'的東西只是'jQuery.each'給我們的一個特性,可以在它們之間進行切換,並且沒有javascript欺騙性。比如說 ? –