内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

js中閉包指的是什么

這篇文章給大家分享的是有關(guān)js中閉包指的是什么的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

為玉州等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及玉州網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、玉州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

本文實(shí)例講述了js 閉包。分享給大家供大家參考,具體如下:

1.什么是閉包

定義:是指有權(quán)訪問另一個(gè)函數(shù)作用域中的變量的函數(shù)

創(chuàng)建閉包:在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)

基本特點(diǎn) 在返回的匿名函數(shù)中 可以調(diào)用外部函數(shù)的變量 如下例中所示 內(nèi)部函數(shù)(匿名函數(shù)) 可以訪問外部函數(shù)的變量num 形式如a[num] 原因是匿名函數(shù)作用域鏈中包括外部函數(shù)test1的作用域

閉包有權(quán)訪問包含函數(shù)內(nèi)部的所有變量 如下面的 外部函數(shù)定義變量d 在閉包中可以直接訪問到d (var dd=d)

 function test1(num){
     var d;

    return function(a,b){
      var d1=a[num],d2=b[num];
      var dd=d;
 }

  }

實(shí)例參考 此時(shí)點(diǎn)擊產(chǎn)品1 到 產(chǎn)品4 結(jié)果都是5 點(diǎn)擊匿名函數(shù)的作用域鏈中包括外部函數(shù)init的活動(dòng)對(duì)象 都是引用的同一個(gè)變量i 都是5 。解決辦法 返回的匿名函數(shù) 通過立即執(zhí)行函數(shù) 把參數(shù)i傳給匿名函數(shù)

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8" />
  <title>閉包演示</title>
  <style type="text/css">
    p {background:gold;}
  </style>
  <script type="text/javascript">
    function init() {
      var pAry = document.getElementsByTagName("p");
      for( var i=0; i<pAry.length; i++ ) {
        pAry[i].onclick = function() {
          alert(i);
        }
      }
    }
   
  </script>
</head>
<body onload="init();">
<p>產(chǎn)品 0</p>
<p>產(chǎn)品 1</p>
<p>產(chǎn)品 2</p>
<p>產(chǎn)品 3</p>
<p>產(chǎn)品 4</p>
</body>
</html>

彈出結(jié)果都是5截圖 

js中閉包指的是什么

解決辦法:立即執(zhí)行匿名函數(shù) 參數(shù)i是循環(huán)i的值 傳遞給num形參 匿名函數(shù)里 在創(chuàng)建閉包 可以訪問這個(gè)傳遞過來的值num 

pAry[i].onclick = function(num){//......}(i)
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8" />
  <title>閉包演示</title>
  <style type="text/css">
    p {background:gold;}
  </style>
  <script type="text/javascript">
     /*修改后*/
     function init() {
     var pAry = document.getElementsByTagName("p");
     for( var i=0; i<pAry.length; i++ ) {
     pAry[i].onclick = function(num) {

     return function(){
     alert(num)
     }
     }(i)
     }
     }

  </script>
</head>
<body onload="init();">
<p>產(chǎn)品 0</p>
<p>產(chǎn)品 1</p>
<p>產(chǎn)品 2</p>
<p>產(chǎn)品 3</p>
<p>產(chǎn)品 4</p>
</body>
</html>

結(jié)果點(diǎn)擊第一展示

js中閉包指的是什么

還有這樣寫也是可以的

 function a(){
      var pAry = document.getElementsByTagName("p");
      for( var i=0; i<pAry.length; i++ ) {
        (function(num){
          pAry[num].onclick = function() {
            alert(num);
          }
        })(i)
      }
    }

1.1 閉包的原理

-1) 閉包的作用域鏈 包括 閉包自身的作用域(一般返回匿名函數(shù)的作用域),外部函數(shù)的作用域(包含的外部函數(shù)),全局作用域

-2)通常,函數(shù)的作用域和所有變量都會(huì)在函數(shù)執(zhí)行結(jié)束后被銷毀

-3)函數(shù)返回一個(gè)閉包,這個(gè)函數(shù)的作用域會(huì)一直保存在內(nèi)存中直到閉包不存在為止

使用閉包可以模仿塊級(jí)作用域

-1)創(chuàng)建閉包并立即執(zhí)行這個(gè)函數(shù) 不會(huì)再內(nèi)存中留下該函數(shù)的引用

-2 )結(jié)果 函數(shù)內(nèi)部的所有變量都會(huì)被立即銷毀

2.什么是作用域鏈


執(zhí)行環(huán)境:定義了變量或函數(shù)有權(quán)訪問其他數(shù)據(jù),決定它們各自的行為。

變量對(duì)象:每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對(duì)象。

執(zhí)行環(huán)境定義的所有變量和函數(shù)都保存在變量對(duì)象中。編寫代碼無法訪問這個(gè)對(duì)象,解析器在處理數(shù)據(jù)時(shí)會(huì)在后臺(tái)使用它。

-1)全局執(zhí)行環(huán)境是最外圍的一個(gè)執(zhí)行環(huán)境

-2)web瀏覽器中,全局執(zhí)行環(huán)境默認(rèn)是window對(duì)象,因此所有全局變量和函數(shù)都是作為window對(duì)象的屬性和方法創(chuàng)建的

-3)某個(gè)執(zhí)行環(huán)境中的所有代碼執(zhí)行完畢后,該環(huán)境被銷毀,保存在其中的所有變量和函數(shù)定義都隨之銷毀  全局執(zhí)行環(huán)境直到應(yīng)用程序退出--例如關(guān)閉網(wǎng)頁(yè)或?yàn)g覽器時(shí)才會(huì)被銷毀

-4)每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境

作用域鏈:當(dāng)代碼在一個(gè)執(zhí)行環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對(duì)象 一個(gè)作用域鏈

作用域鏈用途:保證對(duì)執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問

標(biāo)識(shí)符解析:沿著作用域鏈一級(jí)一級(jí)的向上搜索標(biāo)識(shí)符的過程。

函數(shù)參數(shù)也被當(dāng)做變量來看待,因此訪問規(guī)則與執(zhí)行環(huán)境中的其它變量相同。 例子:下面函數(shù)chageColor(num){} 在閉包里tempColor(a){}里可用a[num]訪問

實(shí)例解析

<script type="text/javascript">
  /*全局變量*/
  var color = 'red' ;

  function changeColor(num){
    var otherColor = 'blue',
      another =color,
     chage = changeColor();


      function tempColor(a){
         var temp = otherColor,
           temp2 = color,
           temp3 = changeColor();/*這里可以訪問上層執(zhí)行環(huán)境otherColor another chage 和全局color*/
         var u =a[num];


      }

  }
</script>

全局 window

             |

             |-------------color 全局變量

             |------------changeColor()

                                             |

                                             |---------------otherColor(局部變量 還有兩個(gè)就是調(diào)用的上層全局環(huán)境里的color變量和函數(shù)chageColor)

                                             |---------------tempColor()

                                                                               |-------------------h(變量h不能被上層執(zhí)行環(huán)境調(diào)用 只能在tempColor()里調(diào)用 標(biāo)識(shí)符向上搜索沿著作用域鏈 這個(gè)環(huán)境里可以調(diào)用外層環(huán)境和全局環(huán)境的變量)

感謝各位的閱讀!關(guān)于“js中閉包指的是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)站標(biāo)題:js中閉包指的是什么
文章地址:http://www.rwnh.cn/article10/gjhigo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷品牌網(wǎng)站制作、虛擬主機(jī)、網(wǎng)站內(nèi)鏈定制開發(fā)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
罗定市| 汾西县| 西昌市| 开封市| 瑞金市| 富锦市| 涪陵区| 六安市| 普陀区| 阿巴嘎旗| 青州市| 凉城县| 岑溪市| 阿荣旗| 宣武区| 彩票| 泰宁县| 彭泽县| 郯城县| 马关县| 会理县| 汉川市| 铁岭县| 达州市| 安多县| 建宁县| 西畴县| 沙田区| 当雄县| 鄱阳县| 马龙县| 互助| 海盐县| 南京市| 分宜县| 会泽县| 洱源县| 博兴县| 四川省| 罗源县| 大同市|