摘要:在多人協(xié)作時(shí),如果定義過多的全局變量有可能造成全局變量命名沖突,使用閉包來解決功能對(duì)變量的調(diào)用將變量寫到一個(gè)獨(dú)立的空間里面就是閉包里面外部?jī)?nèi)部打印形成接口將最后一個(gè)函數(shù)之后返回給函數(shù)形成一個(gè)執(zhí)行函數(shù)的接口開啟這個(gè)功能這樣做形成了一個(gè)閉包閉包
javaScript在多人協(xié)作時(shí),如果定義過多的全局變量 有可能造成全局變量命名沖突,使用閉包來解決功能對(duì)變量的調(diào)用 將變量寫到一個(gè)獨(dú)立的空間里面 就是閉包里面
1 var name = "外部name"; 2 var init = (function(){ 3 var name = "內(nèi)部name"; 4 function callName(){ 5 console.log(name); 6 //打印name 7 } 8 return function(){ 9 callName(); 10 //形成接口 11 } 12 }()); 13 init();
將最后一個(gè)函數(shù)return之后返回給init函數(shù)形成一個(gè)執(zhí)行callName()函數(shù)的接口 開啟callName()這個(gè)功能 這樣做形成了一個(gè)閉包 閉包的變量私有化不會(huì)污染全局變量
執(zhí)行init() 打印的name與外部的name互不影響
使用這種方式也有利于實(shí)現(xiàn)各種操作 不污染全局變量就可以把特定的功能寫到一個(gè)閉包里面去 然后留出一個(gè)接口方便啟用這個(gè)功能
var name = "GlobalName"; //全局變量 var init = (function(){ var name = "initName"; function callName(){ console.log(name); //打印name } return function(){ callName(); //形成接口 } }()); init(); // --> initName var initSuper = (function(){ var name = "initSuperName"; function callName(){ console.log(name); //打印name } return function(){ callName(); //形成接口 } }()); initSuper(); // --> initSuperName
在執(zhí)行init( )和initSuper( )時(shí)打印的name值互不影響
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93589.html
摘要:在內(nèi)部,理所當(dāng)然能訪問到局部變量,但當(dāng)作為的返回值賦給外的全局變量時(shí),神奇的事情發(fā)生了在全局作用域中訪問到了,這就是閉包。而閉包最神奇的地方就是能在一個(gè)函數(shù)外訪問函數(shù)中的局部變量,把這些變量用閉包的形式放在函數(shù)中便能避免污染。 一、閉包是什么? 《JavaScript高級(jí)程序設(shè)計(jì)》中寫道:閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù),如果用下定義的觀點(diǎn)看,這句話就是說閉包是函數(shù),我...
摘要:閉包會(huì)在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。立即執(zhí)行函數(shù)立即執(zhí)行函數(shù),顧名思義,立即會(huì)執(zhí)行的函數(shù),即當(dāng)讀取到該函數(shù),會(huì)立即執(zhí)行。特性使用語句聲明一個(gè)變量,該變量的范圍限于聲明它的塊中。使用聲明的變量,在聲明前無法使用,否則將會(huì)導(dǎo)致錯(cuò)誤。 let和閉包 之前一直模模糊糊記得,let解決了某個(gè)閉包問題,想用時(shí)又不敢肯定,今天終于遇到這個(gè)問題了,那我們就一起來分析一下,什么是let,let有...
摘要:大家想想怎么做什么是匿名函數(shù)自執(zhí)行并如何在實(shí)際庫中應(yīng)用匿名函數(shù)自執(zhí)行,注意,注意,只有這個(gè)名字和沒有其它名字,比如封閉空間,這個(gè)是為了讓大家好理解自己造的詞語。 通過本節(jié)課你將學(xué)到: 1.什么是函數(shù)表達(dá)式和函數(shù)聲明 2.first-class function 3.引用和復(fù)制的區(qū)別 4.函數(shù)傳參是怎么回事兒 5.關(guān)于函數(shù)的this和arguments 6.什么是匿名函數(shù)自執(zhí)行并如何在...
摘要:請(qǐng)解釋事件代理事件代理也稱為事件委托,利用了事件冒泡。同源指的是協(xié)議域名端口相同,同源策略是一種安全協(xié)議。目的同源策略保證了用戶的信息安全,瀏覽器打開多個(gè)站點(diǎn)時(shí),互相之間不能利用獲取對(duì)方站點(diǎn)的敏感信息。 請(qǐng)解釋事件代理(event delegation) 事件代理也稱為事件委托,利用了事件冒泡。例如: item1 item2 item3 當(dāng)頁面li增多時(shí)單...
摘要:高階函數(shù)不是的所特有的,其他編程語言也有。高階函數(shù)面向切面編程面向切面編程這種思想在開發(fā)中比較常見,主要就是將一些與核心業(yè)務(wù)無關(guān)的功能抽離出來,比如異常處理,日志統(tǒng)計(jì)等。 javascript的函數(shù)式語言特性 我們知道JavaScript使一門面向?qū)ο蟮木幊陶Z言,但這門語言同時(shí)擁有很多函數(shù)式語言的特性。 JavaScript的設(shè)計(jì)者在設(shè)計(jì)最初就參考了LISP方言之一的Scheme,引入...
閱讀 786·2023-04-25 16:55
閱讀 2824·2021-10-11 10:59
閱讀 2092·2021-09-09 11:38
閱讀 1810·2021-09-03 10:40
閱讀 1500·2019-08-30 15:52
閱讀 1137·2019-08-30 15:52
閱讀 971·2019-08-29 15:33
閱讀 3507·2019-08-29 11:26