深入淺析JavaScript函數(shù)前面的加號(hào)和嘆號(hào)
+function(){}();
這里的加號(hào),也可以替換成!,~等其他一元操作符,其效果相當(dāng)于:
(function() { console.log("Foo!"); })(); // or (function() { console.log("Foo!"); }());
如果沒(méi)有這個(gè)加號(hào)的話,解析器會(huì)認(rèn)為function是一個(gè)函數(shù)聲明的開(kāi)始,而后面()將會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。在function前面加上+號(hào)時(shí),就變成了一個(gè)函數(shù)表達(dá)式,而函數(shù)表達(dá)式后面又添加了一個(gè)()就變成了一個(gè)立即執(zhí)行的函數(shù)了。
下面看下js函數(shù)前面感嘆號(hào)的作用:
一、JS函數(shù)聲明形式
function fnA(){alert('msg');} //聲明式定義函數(shù)
二、JS函數(shù)表達(dá)式形式
var func = function(agr1,arg2){ //創(chuàng)建匿名函數(shù) alert(arg1 + ' ' + arg2); }
三、JS匿名函數(shù)聲明完立即執(zhí)行的常見(jiàn)格式
(function() { /* code */ })();
說(shuō)明
1、包圍函數(shù)(function(){})的第一對(duì)括號(hào)向腳本返回未命名的函數(shù),隨后一對(duì)空括號(hào)立即執(zhí)行返回的未命名函數(shù),括號(hào)內(nèi)為匿名函數(shù)的參數(shù)。
2、使用括號(hào)包裹定義函數(shù)體,解析器將會(huì)以函數(shù)表達(dá)式的方式去調(diào)用定義函數(shù)。也就是說(shuō),任何能將函數(shù)變成一個(gè)函數(shù)表達(dá)式的作法,都可以使解析器正確的調(diào)用定義函數(shù)。而 ! 就是其中一個(gè),而 + - || 都有這樣的功能。
3、該函數(shù)的作用主要為 匿名 和 自動(dòng)執(zhí)行
相關(guān)文章
JavaScript中yield實(shí)用簡(jiǎn)潔實(shí)現(xiàn)方式
原以為是一個(gè)蠻復(fù)雜的題目,想了許久沒(méi)思路,當(dāng)然要實(shí)現(xiàn)絕對(duì)能實(shí)現(xiàn),但如果分析JavaScript腳本或是動(dòng)態(tài)產(chǎn)生代碼,都太復(fù)雜了。2010-06-06JS實(shí)現(xiàn)可展開(kāi)折疊層的鼠標(biāo)拖曳效果
這篇文章主要介紹了JS實(shí)現(xiàn)可展開(kāi)折疊層的鼠標(biāo)拖曳效果,具有展開(kāi)折疊層及實(shí)時(shí)顯示鼠標(biāo)坐標(biāo)位置的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10微信小程序?qū)崿F(xiàn)動(dòng)態(tài)改變view標(biāo)簽寬度和高度的方法【附demo源碼下載】
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)動(dòng)態(tài)改變view標(biāo)簽寬度和高度的方法,涉及微信小程序事件響應(yīng)及使用setData針對(duì)data數(shù)據(jù)動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-12-12Javascript中Math.max和Math.max.apply的區(qū)別和用法詳解
這篇文章主要介紹了Javascript中Math.max和Math.max.apply的區(qū)別和用法,本文給大家啊介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08