最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS typeof fn === 'function' && fn()詳解

 更新時(shí)間:2020年08月22日 23:31:57   投稿:mdxy-dxy  
最近在學(xué)習(xí)js的時(shí)候發(fā)現(xiàn)很多人都喜歡在JS 中存在fn && fn() 執(zhí)行語(yǔ)句或者typeof fn === 'function' && fn(),下面這篇文章就為大家分享一下

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

function(){
fn&&fn()
}

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

fn 不存在就什么都不做,不會(huì)報(bào)錯(cuò),fn 存在才嘗試執(zhí)行 fn

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

if (fn) {
fn()
}

一般來說函數(shù)的動(dòng)態(tài)調(diào)用,因?yàn)椴恢肋@個(gè)函數(shù)確定存在才會(huì)這么判斷

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

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

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

下面分享正確的寫法

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

實(shí)際應(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)該時(shí)這個(gè)吧:typeof(fn)==='function' && fn(),不過通常約定 fn&&fn() 傳遞的一定是函數(shù)

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

更多的可以查看這篇文章:

就是?.操作符,不包括方括號(hào),我把引號(hào)打成方括號(hào)了。
可以參見這里:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

進(jìn)入可以選擇簡(jiǎn)體中文。

相關(guān)文章

  • URL地址中的#符號(hào)使用說明

    URL地址中的#符號(hào)使用說明

    下面的內(nèi)容介紹了#號(hào)的使用,因?yàn)樵趗rl中多個(gè)#號(hào)代表不同的意義與區(qū)別。
    2011-02-02
  • 微信小程序?qū)崿F(xiàn)留言功能

    微信小程序?qū)崿F(xiàn)留言功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)留言功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 如何用前端html實(shí)現(xiàn)2024煙花效果

    如何用前端html實(shí)現(xiàn)2024煙花效果

    這篇文章主要給大家介紹了關(guān)于如何用前端html實(shí)現(xiàn)2024煙花效果的相關(guān)資料,文中介紹的是JavaScript代碼定義了煙花碎片和火箭類,通過動(dòng)畫循環(huán)模擬煙花爆炸效果,需要的朋友可以參考下
    2024-11-11
  • JavaScript獲取服務(wù)器端時(shí)間的方法

    JavaScript獲取服務(wù)器端時(shí)間的方法

    這篇文章主要介紹了JavaScript獲取服務(wù)器端時(shí)間的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • layer彈出層框架alert與msg詳解

    layer彈出層框架alert與msg詳解

    本文主要介紹了layer彈出層框架alert與msg的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • JavaScript常用腳本匯總(一)

    JavaScript常用腳本匯總(一)

    這篇文章主要介紹了JavaScript常用腳本匯總系列的第一篇,給大家分享的是jquery限制文本框只能輸入數(shù)字、封裝DOMContentLoaded事件、用原生JS對(duì)AJAX做簡(jiǎn)單封裝、跨域請(qǐng)求之JSONP、千分位格式化,有需要的小伙伴們參考下吧。
    2015-03-03
  • 微信小程序嵌入騰訊視頻源過程詳解

    微信小程序嵌入騰訊視頻源過程詳解

    這篇文章主要介紹了微信小程序嵌入騰訊視頻源過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 用box固定長(zhǎng)寬實(shí)現(xiàn)圖片自動(dòng)輪播js代碼

    用box固定長(zhǎng)寬實(shí)現(xiàn)圖片自動(dòng)輪播js代碼

    這篇文章主要介紹了用box固定長(zhǎng)寬實(shí)現(xiàn)圖片自動(dòng)輪播效果,需要的朋友可以參考下
    2014-06-06
  • Javascript的無new構(gòu)建實(shí)例詳解

    Javascript的無new構(gòu)建實(shí)例詳解

    這篇文章主要介紹了Javascript的無new構(gòu)建實(shí)例詳解的相關(guān)資料,小編感覺介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • javascript實(shí)現(xiàn)全角轉(zhuǎn)半角的方法

    javascript實(shí)現(xiàn)全角轉(zhuǎn)半角的方法

    這篇文章主要介紹了javascript實(shí)現(xiàn)全角轉(zhuǎn)半角的方法,涉及JavaScript字符串遍歷與編碼轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01

最新評(píng)論

桂东县| 新民市| 喀喇沁旗| 阿合奇县| 大余县| 九龙县| 永顺县| 灵山县| 磐石市| 长寿区| 海安县| 隆林| 碌曲县| 和平区| 桂林市| 高要市| 翁源县| 新余市| 南投县| 无锡市| 普定县| 双鸭山市| 额尔古纳市| 西充县| 迁西县| 蒙城县| 渝北区| 葵青区| 马山县| 海口市| 张北县| 焉耆| 河间市| 集贤县| 海城市| 怀仁县| 临西县| 都兰县| 黔东| 明溪县| 和田市|