闭包
JS闭包
闭包是函数和声明该函数的词法环境的组合
- 从本质上讲,闭包是外部函数和内部函数链接的桥梁;也就是在一个作用域中可以访问另一个作用域的变量,外部函数作用域可以被内部函数所访问
- 闭包特点:延展了函数的作用域范围
闭包的认识
未闭包
function fn(){
var n = 10
return n
}
console.log(fn()) //10
闭包
function fn1() {
var n = 10;
return function () {
return n;
}
}
var f1 = fn1() // f1 为function () {return n;}
console.log(f1()) // 10延展了函数的作用域范围
闭包的演示
使用闭包产生一段区间的随机数
function ranNum(min,max){
return function(){
return parseInt(Math.random()*(max-min+1))+min
}
}
var f1 = ranNum(5,8)
// 产生[5,8]的随机整数
console.log(f1())
用闭包模拟私有方法
私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。
使用闭包来定义公共函数,并令其可以访问私有函数和变量。这个方式也称为 模块模式
var counter = (function(){
var privateStr = '我是模拟私有方法'
return {
ranNum:function(){
return parseInt(Math.random()*10+1)
},
str:function(val){
return privateStr+=val
}
}
}())
console.log(counter.ranNum()) //产生1到10的随机数
console.log(counter.str('--我添加的字符串')) //我是模拟私有方法--我添加的字符串
以这种方式使用闭包,提供了许多与面向对象编程相关的好处 —— 特别是数据隐藏和封装。
缺点
闭包在处理速度和内存消耗方面对脚本性能具有负面影响
还没有评论,来说两句吧...