JavaScript閉包

閉包

變量作用域
根據(jù)作用域不同分為:全局變量和局部變量
1.函數(shù)內(nèi)部可以使用全局變量
2.函數(shù)外部不可以使用局部變量
3.當函數(shù)執(zhí)行完畢,本作用域內(nèi)的局部變量會銷毀
什么是閉包
閉包指有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù)。--JavaScript高級程序設(shè)計
可以理解為:一個作用域可以訪問另外一個函數(shù)內(nèi)部的局部變量。

function fn(){
  var num = 10;
  function fun(){
    console.log(num )
  }
  fun();
}
fn();//fn 為閉包函數(shù)

閉包的作用
fn外面的作用域可以訪問fn內(nèi)部的局部變量

function fn(){
  var num = 10;
  return function (){
    console.log(num )
  }
}
var f = fn();
f();

閉包的作用是延伸了變量的作用范圍

例子

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
            <ul class="nav"> 
                <li>蘋果</li>
                <li>梨</li>
                <li>香蕉</li>
                  <li>西瓜</li>
             </ul>
            <script>
                //獲取li標簽的索引號
                //1.動態(tài)添加屬性
                var lis = document.querySelector('.nav').querySelectorAll('li');
                  for(var i =0; i<lis.length;i++){
                        lis[i].index = i;
                      lis[i].onclick = function(){
                          console.log(this.index);
                      }
                   }
                  //2.利用閉包的方式
                  for(var i =0; i<lis.length;i++){
                    (function(i){
                        lis[i].onclick = function(){
                          console.log(i);
                        } 
                     })(i);
                  }
             </script>
    </body>
</html>

閉包的缺點是會占用內(nèi)存,造成內(nèi)存泄漏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容