闭包
1.闭包(closure)指有权访问另一个函数作用域中变量的函数
一个函数作用域可以访问另一个函数局部变量,延长变量的作用范围
// 1.闭包(closure)指有权访问另一个函数作用域中变量的函数 // 一个函数作用域可以访问另一个函数局部变量 function fn(){ var num=10; function fun(){ console.log(num) } fun() } fn()
2.利用闭包打印当前小li的索引号
核心思路:利用一个小闭包,立即执行函数,将需要的变量当参数传进去,立即执行函数里面的所有函数都可以使用这个变量
<body>
<ul>
<li>苹果</li>
<li>香蕉</li>
<li>梨</li>
</ul>
<script>
// // 1.动态获取当前小li的索引号
// var lis=document.querySelector('ul').querySelectorAll('li')
// for(var i=0;i<lis.length;i++){
// lis[i].index=i
// lis[i].onclick=function(){
// console.log(this.index)
// }
// }
// 2.使用闭包的方式获取当前小li的索引号,可能会导致内存泄露
var lis=document.querySelector('ul').querySelectorAll('li')
for(var i=0;i<lis.length;i++){
(function(i){
lis[i].onclick=function(){
console.log(i)
}
})(i)
}
</script>
</body>
3.利用闭包计算打车价格
// 3.利用闭包计算打车价格 // 打车起步价5(3公里内),之后每多一公里增加2块钱,用户输入公里即可计算出价格 // 如果拥堵情况,总价格多收5块钱拥堵费 var car = (function() { var start = 5; var total = 0; return { price: function(n) { if (n <= 3) { total = start; } else { total = start + (n - 3) * 2; } return total; }, yd: function(flag) { return flag ? total + 5 : total; } } })(); console.log( car.price(3)) console.log(car.yd(true))
浙公网安备 33010602011771号