<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Javascript中閉包(Closure)的探索(一)-基本概念

      由于我是做web開發的,在項目中經常使用javascript。對js的閉包特性早有耳聞,趁著不是很忙自己研究了一下。

      通過從網絡上的查找,了解到javascript的閉包特性,總結了一下,不足之處希望大家不吝指教!

      1.Closure的基本概念(摘抄如下):

      “閉包”是一個表達式(一般是函數),它具有自由變量以及綁定這些變量的環境(該環境“封閉了”這個表達式)。

      閉包,就是封閉了外部函數作用域中變量的內部函數。但是,如果外部函數不返回這個內部函數,閉包的特性無法顯現。

      如果外部函數返回這個內部函數,那么返回的內部函數就成了名副其實的閉包。此時,閉包封閉的外部變量就是自由變量,而由于該自由變量存在,外部函數即便返回,其占用的內存也得不到釋放。

      2.以一個小問題為例解釋一下閉包的特性:

      要求:給頁面上的一系列按鈕綁定帶有不同參數的函數。

      代碼(為說明問題簡化了代碼):

      <html xmlns="http://www.w3.org/1999/xhtml" >
      <head>
      <title>JsClosure</title>
      <script type="text/javascript">
      function initBtnClick() {
      for (var i = 1; i < 6; i++) {
      var btn = document.getElementById("button" + i);
      btn.onclick
      = function() {
      alert(i);
      };
      }
      }


      </script>
      </head>
      <body>
      <input type="button" value="closureTest" onclick="initBtnClick()" />
      <input type="button" value="button1" id="button1" />
      <input type="button" value="button2" id="button2" />
      <input type="button" value="button3" id="button3" />
      <input type="button" value="button4" id="button4" />
      <input type="button" value="button5" id="button5" />
      </body>
      </html>
       

      現象:首先點擊“closureTest”按鈕給其他按鈕綁定事件,然后點擊其他五個按鈕發現alert出來的值全是6。與預期的1,2,3,4,5相差甚遠!

      按閉包的定義分析現象:在給按鈕綁定事件時使用的匿名函數(即封閉了外部函數作用域中變量的內部函數),但是由于外部函數initBtnClick沒有返回此匿名函數,所以閉包沒有起作用(即如果外部函數不返回這個內部函數,閉包的特性無法顯現)。匿名函數封閉的外部變量(即i)沒有成為自由變量,內存被釋放,最終只保留了循環的最后一個值6。

      根據分析改進initBtnClick函數,使其形成一個真正的閉包:

      function initBtnClick() {
      for (var i = 1; i < 6; i++) {
      var btn = document.getElementById("button" + i);
      btn.onclick
      = function(j) {
      return function() {
      alert(j);
      }
      } (i);
      }
      }

      再次點擊“closureTest”按鈕給其他按鈕綁定事件,然后點擊其他五個按鈕發現依次alert1,2,3,4,5。與預期的結果相同。

      現象分析:通過執行外部的匿名函數(function(j))返回內部的匿名函數function(){alert(j);}形成真正的閉包(即如果外部函數返回這個內部函數,那么返回的內部函數就成了名副其實的閉包)。匿名函數(function(j))傳入的參數i就成了自由變量,內存不會被釋放(即閉包封閉的外部變量就是自由變量,而由于該自由變量存在,外部函數即便返回,其占用的內存也得不到釋放)。

      改進后的代碼如下,為了清晰一些將內部匿名函數封裝了一下:

      function displayNum(inputNum) {
      return function() {
      alert(inputNum);
      };
      }

      function initBtnClick() {
      for (var i = 1; i < 6; i++) {
      var btn = document.getElementById("button" + i);
      btn.onclick
      = displayNum(i);
      }
      }

      本例只是簡單的介紹了一下js的閉包,只是希望大家能對閉包有個直觀點的了解。

      posted @ 2010-05-04 21:00  wang_yb  閱讀(702)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 日产一区日产2区| 久久亚洲精品天天综合网| 狠狠久久五月综合色和啪| 国产卡一卡二卡三免费入口| 久久精品一区二区东京热| 一区二区三区精品视频免费播放| 色伦专区97中文字幕| 99中文字幕国产精品| 2021亚洲va在线va天堂va国产| A级孕妇高清免费毛片| 亚洲精品自拍区在线观看| 久久亚洲国产精品久久| 九九视频热最新在线视频| 忘忧草在线社区www中国中文 | 91精品国产老熟女在线| 野花社区在线观看视频| 国产福利片无码区在线观看| 国产91久久精品成人看| 中国国产一级毛片| 欧美疯狂xxxxxbbbbb| 里番全彩爆乳女教师| 欧美丰满熟妇xxxx性大屁股| 欧美和黑人xxxx猛交视频| 少妇激情一区二区三区视频| 国内精品自线在拍| 三级国产三级在线| 97国产揄拍国产精品人妻| 亚洲成人精品一区二区中| 亚洲av无码乱码在线观看牲色| 苍梧县| 无线乱码一二三区免费看| 国产精品福利片在线观看| 亚洲男女羞羞无遮挡久久丫| 成人午夜激情在线观看| 国产成年码av片在线观看| 亚洲精品美女一区二区| julia无码中文字幕一区| 国产超碰人人做人人爰| 色综合久久一区二区三区| 高潮videossex潮喷| 亚洲精品免费一二三区|