学习笔记(三)对于闭包的理解
闭包的定义:
1.闭包指有权访问另一个函数作用域中变量的函数(简单的来说就是函数内的变量被外部所使用)
定义在一个函数内部的函数 本质上就是函数内部连接函数外部的一个桥梁
闭包的主要作用是:延伸了变量的作用范围
function fn() { var num = 10; // function fun() { // console.log(num); // } // return fun; return function() { console.log(num); } } var f = fn(); f();
//这样就获取到了函数内部的num值
案例分析:
点击对应的li标签显示相应的内容
方式一:
var li = document.querySelectorAll('li'); for(var i = 0;i<li.length;i++){ li[i].index = i; li[i].onclick = function(){ console.log(this.index); } } //动态的添加属性
方式二:
使用闭包的方式
// 2. 利用闭包的方式得到当前小li 的索引号 for (var i = 0; i < lis.length; i++) { // 利用for循环创建了4个立即执行函数 // 立即执行函数也成为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量 (function(i) { // console.log(i); lis[i].onclick = function() { console.log(i); } })(i); }
闭包的用途:
计数器:
//计数器 function a(){ var start = 0; function b(){ return start++; } return b; } var i = a();
i = null; //释放当前变量 // 我们希望start不暴露在全局中,在内部进行调用的时候,就要用到这个闭包的思想,获取到start的值 这些变量会始终在内存当中不会被垃圾回收机制回收,当使用的
越来越多的时候会一直存在我们的内存当中使用闭包要小心内存的泄露
浙公网安备 33010602011771号