亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

請問在javascript 的 "!function" 是什么意思?

請問在javascript 的 "!function" 是什么意思?

侃侃爾雅 2019-07-09 11:07:52
javascript 的 "!function" 是什么意思?
查看完整描述

4 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

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

查看完整回答
反對 回復 2019-07-28
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

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

js中可以這樣創建一個匿名函數

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

//或

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

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

這樣寫會報錯:

function(){alert(1)}()

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

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

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

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

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

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

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

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

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

擴展資料:


匿名函數的調用:

var abc=function(x,y){

return x+y;

}

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

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

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

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

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







查看完整回答
反對 回復 2019-07-28
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

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

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

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

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

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

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

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


查看完整回答
反對 回復 2019-07-28
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

就是一個函數里的內部函數。

只能在該函數內部調用。

1234567function AA(){    function BB(){        alert(111);    }    BB();}AA();


查看完整回答
反對 回復 2019-07-28
  • 4 回答
  • 0 關注
  • 906 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號