闭包
-
js的变量作用域
-
执行环境
**执行环境**是js里的重要概念,定义了变量或者函数有权访问的其他数据,每个执行环境都有一个与之相关联的变量**对象**。每个函数都有自己的执行环境。当执行流进入一个函数时,函数的执行环境就会被推入一个环境栈中,在函数执行之后再将其弹出。全局执行环境是最外围一个执行环境
-
作用域链
当代码在一个环境中执行时,会创建变量对象的一个**作用域链**。作用域链的作用是保证变量和函数的有序访问。当前执行环境的变量对象中如果找不到某个变量或者函数的标识符,就会沿着作用于链一级一级回溯,直到找到该标识符或者到达全局执行环境
简单的说,就是内部函数里的变量优先级高,内部函数有权访问外部函数内的变量或者函数,而外部函数不能访问内部函数的变量或者函数
-
-
闭包的概念
由第一节我们知道,正常情况下外部函数是不能访问内部函数的变量的,但是可以利用闭包来实现对函数内部变量的访问。
一个例子
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
在上面的例子中,result就是一个闭包,实现了对函数内变量的访问。而且f1的内部变量一直存在于内存中,并没有随着f1的调用后清除。
-
使用闭包的优缺点
通过以上例子也看一看出闭包主要的用途读取函数内部的变量
让这些变量的值始终保存在内存中
但是使用闭包也意味着会将函数中所有该变量保存在内存中,对内存的消耗会加大。而且闭包会在父函数外部改变父函数内部变量,使用是应多加注意。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。