日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

( function(){…} )()和( function (){…} () )是两种立即执行函数

發(fā)布時間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ( 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。