精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
理解javascript中的立即執行函數(function(){})()

之前看了好多代碼,都有用到這種函數的寫法,但是都沒認真的去想為什么會這樣寫,今天開始想學習下jquery的源碼,發現jquery也是使用這種方式,用(function(window, undefined){})(window)包裹內部代碼,于是進一步的去學習了下。

要理解立即執行函數(function(){})(),先了解些函數的基本概念(函數聲明、函數表達式、匿名函數)。

函數聲明:使用function聲明函數,并指定函數名。 

function setFn() {    // coding   }

函數表達式:使用function聲明函數,但未指定函數名,將匿名函數賦予一個變量。

var setFn = function() {    // coding}

匿名函數:使用function關鍵字聲明函數,但未指定函數名。匿名函數屬于函數表達式,匿名函數有很多作用,賦予一個變量則創建函數,賦予一個事件則成為事件處理程序或創建閉包等等。

function() {    // coding}

函數聲明與函數表達式的不同在于:

1. 函數聲明可在當前作用域下提前調用執行,函數表達式需等執行到該函數后,方可執行,不可提前調用。

setFn()function setFn() {    // coding  }// 正常,函數聲明可提前調用setFn()var setFn = function() {    // coding} // 報錯,setFn未保存對函數的引用,函數調用需放在函數表達式后面

2. 函數表達式可直接在函數后加括號調用。

var setFn = function() {    console.log(2)}()// 2   解析至此,可直接執行調用

立即執行函數(function(){})()可以看出很像函數表達式的調用,但為什么要加括號呢?如果不加括號:

function(){    console.log(1)}()// 報錯,函數需要函數名

解析: 雖然匿名函數屬于函數表達式,但未進行賦值,所以javascript解析時將開頭的function當做函數聲明,故報錯提示需要函數名

立即執行函數里面的函數必須是函數表達式,所以由var setFn = function() {}()可以理解為在匿名函數前加了 = 運算符后,將函數聲明轉化為函數表達式,所以拿!,+,-,()...等運算符來測試下是否如此。

!function(){    console.log(1)}()// 1    +function(){    console.log(2)}()// 2    -function(){    console.log(3)}()// 3    (function(){    console.log(4)})()// 4

 

由此可見,加運算符確實可將函數聲明轉化為函數表達式,而之所以使用括號,是因為括號相對其他運算符會更安全,可以減少不必要的麻煩。

立即執行函數與正常函數傳參形式是一致的。

(function(a, b){    console.log(a + b);})(1, 2)// 3

(function(){}())這樣寫的好處是在內部定義的變量不會跟外部的變量有沖突,達到保護內部變量的作用。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深入理解javascript中的立即執行函數(function(){…})()
JavaScript基礎
一道前端經常忽視的JavaScript面試題
「學習筆記」JavaScript基礎
[譯]JavaScript:void運算符
JS匿名自執行函數(IIFE)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 涟源市| 巴东县| 平阳县| 辽宁省| 萍乡市| 邻水| 贵阳市| 芜湖市| 澄城县| 余江县| 中西区| 葫芦岛市| 合山市| 若羌县| 满洲里市| 石景山区| 佛冈县| 太仓市| 鄂伦春自治旗| 涿鹿县| 靖江市| 靖西县| 凤翔县| 河北区| 丰原市| 普兰店市| 雅安市| 云阳县| 都兰县| 成都市| 海晏县| 翁牛特旗| 上思县| 甘德县| 太保市| 唐山市| 故城县| 瑞安市| 绥滨县| 云和县| 临沂市|