闭包就是能够读取其他函数内部变量的函数
1: 通过作用域链读取的
语法作用域。
低级作用域:if else for
高级作用域:function
同级别的作用域可以相互嵌套
高级的作用域,可以嵌套低级的作用域
低级作用域嵌套高级作用域无效
// 1.同级作用域嵌套
function fn() {
function fn1() {
function fn2() {
function fn3() {}
}
}
}
// 2.高级作用域嵌套低级作用域
function fn() {
if (true) {
}
}
// 3.低级作用域 嵌套 高级作用域 (无效)
if (true) {
function fn() {}
}
//MND链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
// MDN 认为 函数里面 嵌套函数 不一定是闭包
// MDN 观点认为:以下是语法作用域效果,不是 闭包
function foo() {
var name = 1;
function fire() {
console.log(name);
}
fire();
fire();
fire();
}
foo();
// 所有人都认为,以下一定是闭包
function foo() {
var name = 1;
return function fire() {
console.log(++name);
};
}
var res = foo();
// 百度百科 认为 闭包 必须是 可以 访问 函数内部 变量的 函数————> 没有说明是内部函数还是外部函数
// 百度百科认为是 闭包: 因为 函数 包括内部函数 和外部函数,内部的访问也叫做访问。
function foo() {
var age = 1;
function fire() {
console.log(age);
}
fire();
fire();
fire();
}
foo();