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

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

感嘆號在功能之前做了什么?

感嘆號在功能之前做了什么?

感嘆號在功能之前做了什么?!function () {}();
查看完整描述

4 回答

?
哈士奇WWW

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

功能:

function () {}

什么都不返回(或未定義)。

有時我們想在創(chuàng)建函數(shù)時調(diào)用函數(shù)。你可能想嘗試這個:

function () {}()

但它導致了一個SyntaxError

!在函數(shù)之前使用運算符會將其視為表達式,因此我們可以調(diào)用它:

!function () {}()

這也將返回與函數(shù)返回值相反的布爾值,在這種情況下true,因為!undefinedtrue。如果您希望實際返回值是調(diào)用的結(jié)果,那么嘗試這樣做:

(function () {})()


查看完整回答
反對 回復 2019-05-27
?
斯蒂芬大帝

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

使用airbnb JavaScript指南!上標記的函數(shù)調(diào)用是一個很好的觀點

通常在單獨的文件(也稱為模塊)上使用此技術(shù)的想法,后來得到連接。這里需要注意的是,文件應該被工具連接起來,這些工具將新文件放在新行(這對于大多數(shù)連接工具來說無論如何都是常見的行為)。在這種情況下,!如果先前連接的模塊錯過了后續(xù)分號,則使用將有助于避免錯誤,但這樣可以靈活地將它們置于任何順序而不用擔心。


!function abc(){}();

!function bca(){}();

會像以前一樣工作


!function abc(){}();

(function bca(){})();

但保存兩個字符和任意看起來更好。


順便說一句任何的+,-,~,void運營商有同樣的效果,在調(diào)用該函數(shù),這是肯定的方面,如果你有使用的東西從該功能,他們將采取不同的回報。


abcval = !function abc(){return true;}() // abcval equals false

bcaval = +function bca(){return true;}() // bcaval equals 1

zyxval = -function zyx(){return true;}() // zyxval equals -1

xyzval = ~function xyz(){return true;}() // your guess?

但是如果你將IIFE模式用于一個文件,一個模塊代碼分離并使用concat工具進行優(yōu)化(這使得一行一個文件工作),那么構(gòu)造


!function abc(/*no returns*/) {}()

+function bca() {/*no returns*/}()

將執(zhí)行安全的代碼,與第一個代碼示例相同。


這個會拋出錯誤導致JavaScript ASI無法完成其工作。


!function abc(/*no returns*/) {}()

(function bca() {/*no returns*/})()

關(guān)于一元運算符的一個注意事項,他們會做類似的工作,但僅在以下情況下,他們不會在第一個模塊中使用。因此,如果您無法完全控制連接順序,那么它們就不那么安全了。


這有效:


!function abc(/*no returns*/) {}()

^function bca() {/*no returns*/}()

這不是:


^function abc(/*no returns*/) {}()

!function bca() {/*no returns*/}()


查看完整回答
反對 回復 2019-05-27
?
猛跑小豬

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

它返回語句是否可以計算為false。例如:


!false      // true

!true       // false

!isValid()  // is not valid

您可以使用它兩次將值強制為布爾值:


!!1    // true

!!0    // false

所以,更直接地回答你的問題:


var myVar = !function(){ return false; }();  // myVar contains true

編輯:它具有將函數(shù)聲明更改為函數(shù)表達式的副作用。例如,以下代碼無效,因為它被解釋為缺少必需標識符(或函數(shù)名稱)的函數(shù)聲明:


function () { return false; }();  // syntax error


查看完整回答
反對 回復 2019-05-27
?
largeQ

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

JavaScript語法101.這是一個函數(shù)聲明

function foo() {}

請注意,沒有分號:這只是一個函數(shù)聲明。您需要一個調(diào)用foo()來實際運行該函數(shù)。

現(xiàn)在,當我們添加看似無害的感嘆號時:!function foo() {}它將它變成一個表達式。它現(xiàn)在是一個函數(shù)表達式

!本身并不能調(diào)用該函數(shù),當然,但我們現(xiàn)在可以把()結(jié)尾:!function foo() {}()它的優(yōu)先級高于!并立即調(diào)用函數(shù)。

所以作者正在做的是為每個函數(shù)表達式保存一個字節(jié); 一種更易讀的寫作方式是:

(function(){})();

最后,!使表達式返回true。這是因為在默認情況下所有IIFE回報undefined,這給我們留下了!undefined這是true。不是特別有用。


查看完整回答
反對 回復 2019-05-27
  • 4 回答
  • 0 關(guān)注
  • 992 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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