第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript 的 "!function" 是什么意思?

javascript 的 "!function" 是什么意思?

RISEBY 2019-02-06 11:07:37
javascript 的 "!function" 是什么意思?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經(jīng)驗 獲得超3個贊

!function跟(function(){... })();函數(shù)意義相同,叫做立即運行的匿名函數(shù)(也叫立即調(diào)用函數(shù))。

js中可以這樣創(chuàng)建一個匿名函數(shù)

(function(){do something...})()

//或

(function(){do something...}())

匿名函數(shù)后面的小括號()是為了讓匿名函數(shù)立即執(zhí)行,其實就是一個函數(shù)調(diào)用。

這樣寫會報錯:

function(){alert(1)}()

因為function前面沒有(或者! ~之類的運算符,js解析器會試圖將關(guān)鍵字function解析成函數(shù)聲明語句,而不是函數(shù)定義表達式。

作為組運算符,小括號()會將其內(nèi)部的表達式當成一個整體,然后返回結(jié)果,所以定義一個匿名函數(shù)正確的格式就是用小括號將函數(shù)體括起來。

同樣的! ~ + -等運算符也有同樣的效果,這是因為匿名函數(shù)也是一種值,這些運算符會將后面的函數(shù)體當成一個整體,先對匿名函數(shù)進行求值,然后在對結(jié)果進行運算。

不過這些運算符雖然能夠達到讓匿名函數(shù)立即執(zhí)行的目的,但是要小心他們是有副作用的,比如:

!function() {return 1}()//false

~function() {return 1}()//-2

-function() {return false}()//0

-function() {return false}()//0

沒錯,他們會對函數(shù)的返回值進行運算,這樣可能會導致最終的結(jié)果和你想要的結(jié)果不一樣。當然,對于那些沒有返回值的函數(shù)來說,當然是沒有什么影響了。

擴展資料:


匿名函數(shù)的調(diào)用:

var abc=function(x,y){

return x+y;

}

alert(abc(2,3)); // "5"

上面的操作其實就等于換個方式去定義函數(shù),這種用法是我們比較頻繁遇到的。

例如我們在設定一個DOM元素事件處理函數(shù)的時候,我們通常都不會為他們定名字,而是賦予它的對應事件引用一個匿名函數(shù)。

使用()將匿名函數(shù)括起來,然后后面再加一對小括號(包含參數(shù)列表)。

alert((new Function("x","y","return x*y;"))(2,3));// "6"







查看完整回答
反對 回復 2019-03-20
?
肥皂起泡泡

TA貢獻1829條經(jīng)驗 獲得超6個贊

嘆號后面跟函數(shù)!function
和加號后面跟函數(shù)+function
都是跟(function(){})();這個函數(shù)是一個意思,都是告訴瀏覽器自動運行這個匿名函數(shù)的,因為!+()這些符號的運算符是最高的,所以會先運行它們后面的函數(shù)

查看完整回答
反對 回復 2019-03-20
?
POPMUISE

TA貢獻1765條經(jīng)驗 獲得超5個贊

這種叫自執(zhí)行函數(shù)表達式
在這種情況下,解析器在解析function關(guān)鍵字的時候,會將相應的代碼解析成function表達式,而不是function聲明。

// 下面2個括弧()都會立即執(zhí)行

(function () { /* code */ } ()); // 推薦使用這個
(function () { /* code */ })(); // 但是這個也是可以用的

// 由于括弧()和JS的&&,異或,逗號等操作符是在函數(shù)表達式和函數(shù)聲明上消除歧義的
// 所以一旦解析器知道其中一個已經(jīng)是表達式了,其它的也都默認為表達式了

var i = function () { return 10; } ();
true && function () { /* code */ } ();
0, function () { /* code */ } ();

// 如果你不在意返回值,或者不怕難以閱讀
// 你甚至可以在function前面加一元操作符號

!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();



查看完整回答
反對 回復 2019-03-20
  • 3 回答
  • 0 關(guān)注
  • 1083 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號