溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

深入淺析JavaScript中的 typeof fn === 'function' && fn()

發(fā)布時間:2020-11-07 16:46:52 來源:億速云 閱讀:561 作者:Leah 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)深入淺析JavaScript中的 typeof fn === 'function' && fn(),文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我在看別人代碼的時候,有看到代碼是這樣寫的

function(){
fn&&fn()
}

大概意思是這么個意思,但是這我感覺這樣寫好像沒意義,有帶佬能指點一下嗎

fn 不存在就什么都不做,不會報錯,fn 存在才嘗試執(zhí)行 fn

一般來說fn && fn()就如同下面的語句

if (fn) {
fn()
}

一般來說函數(shù)的動態(tài)調(diào)用,因為不知道這個函數(shù)確定存在才會這么判斷

大部分情況是這個意思,如果 fn 是 undefined 就不執(zhí)行 fn()。React 針對 optional callback 會這么寫。

在 js 里面,這是標(biāo)準(zhǔn)的。大幅減少代碼量,比三目運算更直接了當(dāng)。別的語言大同小異:fn?.xx()

這樣寫思路是對的,實現(xiàn)是錯誤的,fn 可能存在,但是它可能不是 function,執(zhí)行 fn() 一樣會出錯。

下面分享正確的寫法

typeof fn === "function" && fn()

實際應(yīng)用

function addScript (url, fn) {
 var script = document.createElement('script')
 script.setAttribute('type', 'text/javascript')
 script.setAttribute('src', url)
 script.setAttribute('async', 'async')
 document.getElementsByTagName('head')[0].appendChild(script)
 script.onload = function () {
 typeof fn === 'function' && fn()
 }
}

小結(jié)

正確寫法應(yīng)該時這個吧:typeof(fn)==='function' && fn(),不過通常約定 fn&&fn() 傳遞的一定是函數(shù)

這個就是 js 邏輯運算符的魔法:
當(dāng)多個 &&串聯(lián)時,執(zhí)行到第一個 truthy 的表達(dá)式;
當(dāng)多個||串聯(lián)時,執(zhí)行到第一個 false-thy 的表達(dá)式;
但我比較贊同王垠博客上的觀點:短路機制是給程序優(yōu)化執(zhí)行效率的,不是給程序員拿來炫技的。

上述就是小編為大家分享的深入淺析JavaScript中的 typeof fn === 'function' && fn()了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI