闭包是作用域应用的特殊情况,有两种表现:
1、函数作为参数被传递
function foo (fn) {
let a = 1;
fn();
}
let a = 2;
function fn () {
console.log(a);
}
foo(fn);//2
此时输出为2的原因是:
调用fn函数时,从fn函数定义的作用域开始寻找a值,fn定义在全局作用域,而全局作用域声明了a的值为2,所以输出为2。
2、函数作为返回值被返回
function foo () {
let a = 1;
return function () {
console.log(a);
}
}
let test = foo();
let a = 2;
test();//1
此时输出1的原因是:
因为foo函数返回一个函数,所以调用test函数实际上就是调用foo返回的函数,那回到该函数定义的作用域开始寻找a值,该函数上级作用域即foo函数的作用域里声明a的值为1,所以输出为1。
博客介绍了JavaScript中闭包作为作用域应用的特殊情况的两种表现。一是函数作为参数被传递,调用时从函数定义的全局作用域找变量值;二是函数作为返回值被返回,调用时从函数上级作用域找变量值,并分别说明了输出结果的原因。
721

被折叠的 条评论
为什么被折叠?



