javascript中的闭包
说到闭包就不得不说javascript中作用域的问题,在javascript中有以下三个作用域全局作用域函数作用域块级作用域( ES6 新增)然后需要说到自由变量,自由变量就是一个变量在当前作用域没有定义,但被使用了向上级作用域,一层一层依次寻找,直到找到为止如果到全局作用域都没找到,则报错 xx is not defind所有的自由变量的查找,是在函数定义的地方,向上级作用域查找 不是在执行的地
·
说到闭包就不得不说javascript中作用域的问题,在javascript中有以下三个作用域
- 全局作用域
- 函数作用域
- 块级作用域( ES6 新增)
然后需要说到自由变量,自由变量就是 - 一个变量在当前作用域没有定义,但被使用了
- 向上级作用域,一层一层依次寻找,直到找到为止
- 如果到全局作用域都没找到,则报错 xx is not defind
所有的自由变量的查找,是在函数定义的地方,向上级作用域查找 不是在执行的地方
作用域应用的特殊情况,有两种表现:即构成了闭包 - 函数作为返回值被返回
function create() {
const a = 100;
return function () {
console.log(a);
};
}
const fn = create();
const a = 200;
fn(); //100
- 函数作为参数被传递
function print(fn) {
const a = 200;
fn();
}
const a = 100;
function fn() {
console.log(a);
}
print(fn); //100
一个函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起(或者说函数被引用包围),这样的组合就是闭包(closure)。也就是说,闭包让你可以在一个内层函数中访问到其外层函数的作用域。在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
更多推荐
已为社区贡献3条内容
所有评论(0)