前端小学生,有错谅解
提到闭包就要理解函数、作用域。
作用域:
1.作用域有全局作用域和局部作用域。
全局作用域在创建js文件时,环境就是全局作用域。
2.局部作用域又有函数作用域和块级作用域。
函数作用域即函数内部环境。
如果在代码的任何位置用大括号括起一个变量,那么该变量也将被封闭,属于块级作用域。
一、闭包的定义
函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。来自MND
闭包就是能够读取其他函数内部变量的函数。来自百度百科。
在语法结构上,闭包通俗的来说就是函数的嵌套
function fn (){ var a=2; return function (){ console.log(a); } } fn();
使得内部环境可以持有外部环境的局部变量(外部环境间接的调用内部环境的局部变量),在本质上就是连接外部函数和内部函数的桥梁。
二、闭包的特性
封闭性:外界无法访问闭包内部的数据。
持久化:对于闭包来说,在外部函数被调用之后,闭包仍然存在
一般来说函数的局部变量在函数调用执行之后就不会再被访问,但是闭包不同。
三、闭包有什么影响
如果不是某些特定任务需要使用闭包,不建议使用闭包,因为闭包在处理速度和内存消耗具有负面影响。
闭包内存泄漏为: key = value,key 被删除了 value 常驻内存中;