+function(){}();
這裡的加號,也可以替換成!,~等其他一元操作符,其效果相當於:
(function() { console.log("Foo!"); })(); // or (function() { console.log("Foo!"); }());
如果沒有這個加號的話,解析器會認為function是一個函數聲明的開始,而後面()將會導致語法錯誤。在function前面加上+號時,就變成了一個函數表達式,而函數表達式後面又添加了一個()就變成了一個立即執行的函數了。
下面看下js函數前面感歎號的作用:
一、JS函數聲明形式
function fnA(){alert('msg');} //聲明式定義函數
二、JS函數表達式形式
var func = function(agr1,arg2){ //創建匿名函數 alert(arg1 + ' ' + arg2); }
三、JS匿名函數聲明完立即執行的常見格式
(function() { /* code */ })();
說明
1、包圍函數(function(){})的第一對括號向腳本返回未命名的函數,隨後一對空括號立即執行返回的未命名函數,括號內為匿名函數的參數。
2、使用括號包裹定義函數體,解析器將會以函數表達式的方式去調用定義函數。也就是說,任何能將函數變成一個函數表達式的作法,都可以使解析器正確的調用定義函數。而 ! 就是其中一個,而 + - || 都有這樣的功能。
3、該函數的作用主要為 匿名 和 自動執行