什么是闭包?闭包的用途是什么?
什么 用途 闭包
2023-06-13 09:16:43 时间
什么是闭包:
如果一个函数用到了它作用域外面的变量,那么这个变量和这个函数之间的环境就叫闭包。
var a = 5
function xx(){
console.log(a)
}
//5
闭包的用途有些什么:
1.模仿块级作用域
所谓块级作用域就是指在循环中定义的变量,一旦循环结束,变量也随之销毁,它的作用范围只在这一小块。而在JavaScript中没有这样的块级作用域,由于JavaScript不会告诉你变量是否已经被声明,所以容易造成命名冲突,如果在全局环境定义的变量,就会污染全局环境,因此可以利用闭包的特性来模仿块级作用域。
function X(num) {
(function(){
for(var i = 0; i < num.length; i++){
num++
}
}).call() //声明一个函数立即调用以后,浏览器刷新页面会报错,可以用一个小括号把整段函数包起来。
console.log(i)//undefined
}
在上面的代码中,闭包就是那个匿名函数,这个闭包可以当函数X内部的活动变量,又能保证自己内部的变量在自执行后直接销毁。这种写法经常用在全局环境中,可以避免添加太多全局变量和全局函数,特别是多人合作开发的时候,可以减少因此产生的命名冲突等,避免污染全局环境。
2.储存变量
闭包的另一个特点是可以保存外部函数的变量,内部函数保留了对外部函数的活动变量的引用,所以变量不会被释放。
function S(){
var a = 1
return {
function(){
renturn a
}
}
}
var d = S() // 100
这种写法可以用在把一些不经常变动计算起来又比较复杂的值保存起来,节省每次的访问时间。
3.封装私有变量
我们可以把函数当作一个范围,函数内部的变量就是私有变量,在外部无法引用,但是我们可以通过闭包的特点来访问私有变量。
var person = function(){
//变量作用域为函数内部,外部无法访问
var name = "default";
return {
getName : function(){
return name;
},
setName : function(newName){
name = newName;
}
}
}();
print(person.name);//直接访问,结果为undefined
print(person.getName()); // default
person.setName("abruzzi");
print(person.getName()); // abruzzi
相关文章
- 【说站】java中@Inherited是什么?
- EasyGBS平台视频快照无法显示是什么原因?如何解决?
- 一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】「建议收藏」
- c# savefiledialog_game是什么意思中文
- 项目经理和产品经理的工作分别是什么?
- 增强现实(AR)是什么?
- targetFtpClient.storeFile(targetFile, inputStream);卡到这里了,是什么原因
- 不可错过的Linux:让你体验最好的事物(linux系统适合做什么)
- 深入探索Oracle数据库的用途(oracle数据库有什么用)
- 什么是JavaBean?
- 什么是慈化武器?战场上如何使用?
- 全渠道营销背后,多点Dmall赋能零售行业的“成功密钥”是什么?
- Oracle主目录概念与用途(oracle主目录指什么)
- Oracle中的序列快速自增主键的秘密(oracle中序列是什么)