JavaScript匿名函數(shù)之模仿塊級作用域
匿名函數(shù)
函數(shù)是JavaScript中最靈活的一種對象,這里只是講解其匿名函數(shù)的用途。
匿名函數(shù):就是沒有函數(shù)名的函數(shù)。
函數(shù)的定義,首先簡單介紹一下函數(shù)的定義,大致可分為三種方式
第一種:這也是最常規(guī)的一種
function double(x){ return 2 * x; }
第二種:這種方法使用了Function構(gòu)造函數(shù),把參數(shù)列表和函數(shù)體都作為字符串,很不方便,不建議使用。
var double = new Function('x', 'return 2 * x;');
第三種:
var double = function(x) { return 2* x; }
注意“=”右邊的函數(shù)就是一個(gè)匿名函數(shù),創(chuàng)造完畢函數(shù)后,又將該函數(shù)賦給了變量square。
JavaScript中是沒有塊級作用域概念的。也就是說,在塊級語句中定義的變量,實(shí)際上是在包含函數(shù)中(外部函數(shù))而非語句中創(chuàng)建的。
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } alert(i); //count }
該函數(shù)在java、C#等語言中,變量i只會在for循環(huán)語句中有定義,循環(huán)結(jié)束,i也就被銷毀了。但在JavaScript中,變量i是定義在outputNumber()活動對象中的,因此在它定義開始,就可以在函數(shù)內(nèi)部訪問它。即使重新聲明同一個(gè)變量,也不會改變它的值。
function outputNumber(count){ for(var i=0;i<1000;i++){ alert(i); } var i; //重新聲明變量 alert(i); //count }
匿名函數(shù)可以用來模仿塊級作用域并避免這個(gè)問題,用作塊級作用域(也稱私有作用域)的匿名函數(shù)的語法如下:
(function(){ //這是塊級作用域 })()
以上代碼定義變調(diào)用了一個(gè)匿名函數(shù),將函數(shù)聲明包含在一個(gè)小括號里面,表示它是個(gè)函數(shù)表達(dá)式。緊跟其后的另一對小括號會立即調(diào)用這個(gè)函數(shù)。
無論什么時(shí)候,只要臨時(shí)需要一些變量,就可以用私用作用域,例如:
function outputNumber(count){ (function(){ for(var i=0;i<1000;i++){ alert(i); })(); alert(i); //導(dǎo)致一個(gè)錯(cuò)誤 }
這樣,我們在for循環(huán)外部插入了一個(gè)私有作用域。在匿名函數(shù)中定義的任何變量,都會在執(zhí)行結(jié)束時(shí)被銷毀。
這種技術(shù)經(jīng)常在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過多的變量和函數(shù)。
一般來說,我們應(yīng)該盡量減少向全局作用域中添加變量和函數(shù)。
這種做法可以減少閉包占用內(nèi)存的問題,因?yàn)闆]有指向匿名函數(shù)的引用,只要函數(shù)執(zhí)行完畢,就可以立即銷毀其作用域鏈。
相關(guān)文章
Javascript 鼠標(biāo)移動上去 滑塊跟隨效果代碼分享
這篇文章主要介紹了Javascript 鼠標(biāo)移動上去 滑塊跟隨效果代碼,有需要的朋友可以參考一下2013-11-11javaScript中with函數(shù)用法實(shí)例分析
這篇文章主要介紹了javaScript中with函數(shù)用法,實(shí)例分析了javascript中with的功能、定義及相關(guān)使用技巧,需要的朋友可以參考下2015-06-06JavaScript一文帶你玩轉(zhuǎn)web表單網(wǎng)頁
表單通常用來收集網(wǎng)頁訪問者信息,常見的表單比如搜索引擎的搜索框、各網(wǎng)頁應(yīng)用的注冊或者登陸界面等,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-10-10自適應(yīng)布局meta標(biāo)簽中viewport、content、width、initial-scale、minimum-sca
這篇文章主要介紹了移動客戶端手機(jī)頁面布局時(shí)各標(biāo)簽元素作用和適用情景,通過詳解幾種屬性讓讀者更明確自適應(yīng)布局的注意點(diǎn),具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08javascript中call apply 的應(yīng)用場景
call, apply都屬于Function.prototype的一個(gè)方法,它是JavaScript引擎內(nèi)在實(shí)現(xiàn)的,因?yàn)閷儆贔unction.prototype,所以每個(gè)Function對象實(shí)例,也就是每個(gè)方法都有call, apply屬性.2015-04-04