闭包
前言
这是小编第一次写关于js方面的文章,所以从闭包开始写起,就是因为在面试过程中出现的几率比较大,有什么不对的地方,欢迎大家指出,我们共同进步
提示:以下是本篇文章正文内容,下面案例可供参考
一、闭包是什么?
闭包就是指一个函数能够访问到另一个函数作用域内部变量的函数(一般为子函数调用父函数的变量)
二、为什么使用闭包呢?
学习一门技术的前提是知道为什么要用这项技术,众所周知,函数内部是没有状态的,在函数执行完毕后,局部变量会自动销毁,使用闭包以后,可以1.缓存变量,替代全局变量使用,避免全局变量污染
2.外部函数访问函数内部变量称为可能
三、代码示例
1.闭包访问外部函数变量
function parent(){
var x = 10;
function child(){
var y = x + 10
return y
}
return child()
}
var result = parent()
//result 20
//chilid为子函数,定义在父函数parent中,child函数里面调用了父函数parent的局部变量x,在执行parent函数时,执行了child函数并将其结果返回,注意此时的x并没有随着parent函数的执行完毕而被销毁
2.闭包缓存数据
function parent(){
var x = 10;
return function(){
var y = ++x
return y
}
}
var fn= parent()
fn() //11
fn() //12
fn() //13
//可能部分同学会以为结果是11,11,11,是不是很意外啊,哈哈
//原因:之前我们说了,闭包可以缓存数据,执行parent函数后,返回了child函数,也就是fn=function(){var y=++x;return y}。这个时候执行fn,有的小伙伴会问,返回的函数fn没有声明局部变量x啊,程序会报错的,其实不然,因为使用了闭包,所以此时x已经被缓存起来了,只要不重新执行parent()函数,x就会执行+1操作
四、注意
不要滥用闭包,因为闭包缓存了数据,没有像普通函数一样执行完毕局部变量自动销毁,而是长久的霸占一块内存,得不到释放,所以滥用闭包可能导致浏览器内存泄漏,以至于访问页面后崩溃