( function(){…} )()和( function (){…} () )是两种立即执行函数
生活随笔
收集整理的這篇文章主要介紹了
( function(){…} )()和( function (){…} () )是两种立即执行函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
函數(shù)聲明:function fnName () {…};
函數(shù)表達式 var fnName = function () {…};
匿名函數(shù):function () {};?
?
fnName(); function fnName(){alert(12); }//正常,函數(shù)聲明調(diào)用前就已存在,所以函數(shù)調(diào)用可在函數(shù)聲明之前 fnName(); var fnName=function(){ alert(123); }//報錯,函數(shù)表達式,屬于按順序執(zhí)行,變量fnName還未保存對函數(shù)的引用,所以函數(shù)調(diào)用必須在函數(shù)表達式之后 var fnName=function(){ alert(1234); }();//函數(shù)表達式后面加括號,當javascript引擎解析到此處時能立即調(diào)用函數(shù) function fnName(){ alert(12345); }();//不會報錯,但是javascript引擎只解析函數(shù)聲明,忽略后面的括號,函數(shù)聲明不會被調(diào)用 function(){ console.log(123456); }();//語法錯誤,雖然匿名函數(shù)屬于函數(shù)表達式,但是未進行賦值操作, //所以javascript引擎將開頭的function關(guān)鍵字當做函數(shù)聲明,報錯:要求需要一個函數(shù)名?
?
( function(){…} )()和( function (){…} () )是兩種立即執(zhí)行函數(shù)
這3種寫法等效:
var client = function() { alert("Chrome");}();?
var client = (function() { alert("Chrome");}());
var client = (function() { alert("Chrome");})();
?
立即執(zhí)行的其他寫法:?
(function(a,b){console.log(a,b); //控制臺輸出123,使用()運算符 })(123,456); (function(a){ console.log(a); //控制臺輸出1234,使用()運算符 }(1234)); !function(a){ console.log(a); //控制臺輸出12345,使用!運算符 }(12345); +function(a){ console.log(a); //控制臺輸出123456,使用+運算符 }(123456); -function(a){ console.log(a); //控制臺輸出1234567,使用-運算符 }(1234567); var fn=function(a){ console.log(a); //控制臺輸出12345678,使用=運算符 }(12345678)在function前面加!、+、 -甚至是逗號等到都可以起到函數(shù)定義后立即執(zhí)行的效果,而()、!、+、-、=等運算符,都將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達式,消除了javascript引擎識別函數(shù)表達式和函數(shù)聲明的歧義,告訴javascript引擎這是一個函數(shù)表達式,不是函數(shù)聲明,可以在后面加括號,并立即執(zhí)行函數(shù)的代碼。?
加括號是最安全的做法,因為!、+、-等運算符還會和函數(shù)的返回值進行運算,有時造成不必要的麻煩。?
這樣寫的作用:?
javascript中沒用私有作用域的概念,如果在多人開發(fā)的項目上,你在全局或局部作用域中聲明了一些變量,可能會被其他人不小心用同名的變量給覆蓋掉,根據(jù)javascript函數(shù)作用域鏈的特性,可以使用這種技術(shù)可以模仿一個私有作用域,用匿名函數(shù)作為一個“容器”,“容器”內(nèi)部可以訪問外部的變量,而外部環(huán)境不能訪問“容器”內(nèi)部的變量,所以( function(){…} )()內(nèi)部定義的變量不會和外部的變量發(fā)生沖突,俗稱“匿名包裹器”或“命名空間”?
JQuery使用的就是這種方法,將JQuery代碼包裹在( function (window,undefined){…jquery代碼…} (window)中,在全局作用域中調(diào)用JQuery代碼時,可以達到保護JQuery內(nèi)部變量的作用。?
轉(zhuǎn)載于:https://www.cnblogs.com/pbblogs/p/9525692.html
總結(jié)
以上是生活随笔為你收集整理的( function(){…} )()和( function (){…} () )是两种立即执行函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。