簡體   English   中英

jQuery:以下代碼塊中比較的含義是什么 - callback && function(){callback.call();}

[英]jQuery: What's the meaning of comparison in following code block - callback && function() {callback.call();}

jQuery.scrollTo.js庫中查看此塊(在第184行的v1.4中)。

function animate( callback ){
    $elem.animate( attr, duration, settings.easing, callback && function(){
        callback.call(this, target, settings);
    });
};

很想知道比較是如何工作的

callback && function() {callback.call(...)}; 

這究竟是什么背后的含義。 提前致謝。

callback && function() {callback.call(...)}; 正在做兩件事:

  • 測試是否已定義callback
  • 如果有,請在正確的上下文中調用它

JavaScript具有稱為“短路邏輯表達式”的功能 如果邏輯表達式的一部分無法更改整體結果,則不會對其進行求值。

如果callback undefined ,則它在邏輯表達式的上下文中計算為false(它是“falsy” )。 因此,表達式變為等同於false && ... ,在這種情況下它不再重要...實際上,結果總是錯誤†1 在這種情況下,JavaScript並沒有考慮...

如果callback不是 undefined (但功能),邏輯表達式的第一部分的計算結果為真(它的“truthy”)。 此時JavaScript會評估... 總體結果恰好是函數表達式。 函數表達式產生一個匿名函數,然后傳遞給jQuery的animate()

所述callback.call()執行callback ,並且確定的含義thiscallback 所以callback.call(this)可以確保this指的是同一個對象作為外部函數。


†1 絕對正確:表達式的整體結果不會為false ,它將是undefined

callback && function() {callback.call(...)}; 

這將檢查回調是否真實(不是false,0,“”,null,undefined,NaN)並且如果它是真實的並且將評估語句的第二部分將返回將作為參數傳遞的函數。

例:

var test = true && function() {};
console.log(typeof test); // "function"

當與布爾操作數一起使用時,&&運算符對這兩個值執行布爾AND運算:當且僅當其第一個操作數和第二個操作數都為真時,它才返回TRue。 如果這些操作數中的一個或兩個都為false,則返回false。

該運算符的實際行為稍微復雜一些。 它首先評估它的第一個操作數,即左邊的表達式。 如果此表達式的值可以轉換為false(例如,如果左操作數的計算結果為null,0,“”或undefined),則運算符將返回左側表達式的值。 否則,它將計算其第二個操作數,即右側的表達式,並返回該表達式的值。

因此這個表達式callback && function(){ callback.call(this, target, settings); } callback && function(){ callback.call(this, target, settings); }返回第二個匿名函數。 這種語法的好處是可以在插件實例的上下文中調用callback函數。

expr1 && expr2

如果邏輯AND( && )運算符可以轉換為false,則返回expr1 ; 否則,返回expr2

現在在您的示例中, callback的函數對象將計算為true並使用匿名函數; 如果callback未定義,則不會創建匿名函數並傳遞未定義的函數。

這不是比較。 .animate()是一種方法,因此括號中的所有項都是參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM