1. 程式人生 > 其它 >!function(){console.log(12);}() 立即執行 感嘆號

!function(){console.log(12);}() 立即執行 感嘆號

!function(){console.log(12);}()    執行

(!function(){console.log(12);}())  執行

function(){console.log(12);}()   報錯

+function(){console.log(12);}()  執行

~function(){console.log(12);}()  執行

-function(){console.log(12);}()  執行

省下1個位元組

js 前加分號和感嘆號是什麼意思?_已解決_博問_部落格園 https://q.cnblogs.com/q/52920/

js檔案中函式前加分號和感嘆號是什麼意思? - 菜鳥江太公 - 部落格園 https://www.cnblogs.com/jiangtian/p/6194645.html

你看到的感嘆號一般是在壓縮過的js檔案裡面,因為在匿名函式呼叫的時候,通常我們都是用:  (function(){})()  的形式,但也可以使用另一種形式:!function(){}() 前面的!號可以換成-+~等等一元操作符,從而省下了1位元組。   javascript裡function之前加上感嘆號 ' ! ' 會怎麼樣? - SegmentFault 思否 https://segmentfault.com/q/1010000000117476

我們都知道,函式的宣告方式有這兩種

function fnA(){alert('msg');}//宣告式定義函式
var fnB = function(){alert('msg');}//函式賦值表示式定義函式

樓主問題中出現的兩個函式,都是匿名函式。通常,我們呼叫一個方法的方式就是 FunctionName()

但是,如果我們嘗試為一個“定義函式”末尾加上(),解析器是無法理解的。

function msg(){
  alert('message');
}();//解析器是無法理解的

定義函式的呼叫方式應該是 msg() ; 那為什麼將函式體部分用()包裹起來就可以了呢?

原來,使用括號包裹定義函式體,解析器將會以函式表示式的方式去呼叫定義函式。也就是說,任何能將函式變成一個函式表示式的作法,都可以使解析器正確的呼叫定義函式。而 ! 就是其中一個,而 + - || 都有這樣的功能。

另外,用 ! 可能更多的是一個習慣問題,不同的運算子,效能是不同的。

Javascript的~(波浪號)用法
Javascript的~(波浪號)用法_黑卡米的部落格-CSDN部落格_javascript 波浪號 https://blog.csdn.net/Aaren_Jiang/article/details/107303023 原理 js中在變數名前加"~" 是位運算NOT,按位取反.
var iNum1 = 25; //25 二進位制原碼等於 00000000000000000000000000011001
var iNum2 = ~iNum1; //轉換為 11111111111111111111111111100110
alert(iNum2);//輸出 "-26"
相當於是對數值求負後減1 ,25 -> -25 -> -26
indexOf用法
if (~this.cartIds.indexOf(item.id)) {      //在if判斷裡,只要是非0都會進入      //當this.cartIds包含item.id時,返回的是0,然後~取反為-1       }
函式用法 在函式前加上波浪號,其作用是把函式宣告轉換為表示式,就可以直接將下面的程式碼放入某個函式裡執行。
function functionName() {   //執行的程式碼   ~function sayHello(){  console.log('hello');}()   } Javascript的~(波浪號)用法
Javascript的~(波浪號)用法_黑卡米的部落格-CSDN部落格_javascript 波浪號 https://blog.csdn.net/Aaren_Jiang/article/details/107303023 原理 js中在變數名前加"~" 是位運算NOT,按位取反.
var iNum1 = 25; //25 二進位制原碼等於 00000000000000000000000000011001
var iNum2 = ~iNum1; //轉換為 11111111111111111111111111100110
alert(iNum2);//輸出 "-26"
相當於是對數值求負後減1 ,25 -> -25 -> -26
indexOf用法
if (~this.cartIds.indexOf(item.id)) {      //在if判斷裡,只要是非0都會進入      //當this.cartIds包含item.id時,返回的是0,然後~取反為-1       }
函式用法 在函式前加上波浪號,其作用是把函式宣告轉換為表示式,就可以直接將下面的程式碼放入某個函式裡執行。
function functionName() {   //執行的程式碼   ~function sayHello(){  console.log('hello');}()   }