javascript
JS中[感叹号]function(){}()的理解
這種寫法,是一種`立即執(zhí)行函數(shù)`的寫法,即IIFE等設(shè)計(jì)模式。這種函數(shù)在函數(shù)定義的地方就直接執(zhí)行了。
理解IIFE設(shè)計(jì)模式的關(guān)鍵是要認(rèn)識(shí)到,在ES6之前,JavaScript僅具有函數(shù)作用域(因此缺少塊作用域),并通過(guò)閉包內(nèi)部的引用傳遞值。ES6之后情況已不再如此,因?yàn)镴avaScript的ES6版本使用let和const關(guān)鍵字實(shí)現(xiàn)了塊作用域。
(function(){})()是匿名函數(shù),主要利用函數(shù)內(nèi)的變量作用域,避免產(chǎn)生全局變量,影響整體頁(yè)面環(huán)境,增加代碼的兼容性。
(function(){})是一個(gè)標(biāo)準(zhǔn)的函數(shù)定義,但是沒(méi)有賦值給任何變量。所以是沒(méi)有名字的函數(shù),叫匿名函數(shù)。沒(méi)有名字就無(wú)法像普通函數(shù)那樣隨時(shí)隨地調(diào)用了,所以在他定義完成后就馬上調(diào)用他,后面的括號(hào)()是運(yùn)行這個(gè)函數(shù)的意思。
如下幾種寫法作用是相同的:
!function () { /* ... */ }(); ~function () { /* ... */ }(); -function () { /* ... */ }(); +function () { /* ... */ }(); void function () { /* ... */ }(); (function (){/*...*/}()); (function (){/*...*/})();所以: !function(){}寫法和(function(){})()是相同的
!function(){}()
1.函數(shù)后的();表示要執(zhí)行這個(gè)函數(shù);
2.而();要求前面必須是一個(gè)表達(dá)式。(最后有js表達(dá)式的定義)。
3.所以"!"的作用是將function(){}函數(shù)體轉(zhuǎn)為一個(gè)函數(shù)表達(dá)式。
總結(jié)
以上是生活随笔為你收集整理的JS中[感叹号]function(){}()的理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js声明变量的三种方式
- 下一篇: 数组转json去除首尾引号_诞生于Jav