看下面一个例子:
function zipCode(code, location) {let _code = code;let _location = location || '';return {code: function () {return _code;},location: function() {return _location;}}
}
再上述封闭的函数中,code的匿名函数根据作用域链可以访问到外面的_code变量.
const princetoZip = zipCode('08544', '3345');
console.log(princetoZip.code());
从上面的例子可以抽出闭包的定义.
闭包: 是一种能够在函数声明过程中将环境信息与所属函数绑定在一起的数据结构.
闭包的作用域,其实就是一种静态作用域或词法作用域,下面给出词法作用域的定义:
词法作用域(静态作用域): 其执行环环境是基于 函数声明的位置的.
闭包的作用: 由于闭包的作用域是静态的,故通过闭包写的代码清晰可读,因此可以广泛的应用于函数式编程的高级函数中,除此之外还可用于事件处理和回调、模拟私有变量等.
参考《JavaScript函数式编程指南》P41