一、什么是作用域闭包
函数在它所声明之外的作用域被执行,此时函数仍然能访问它声明所在作用域内的变量,这就形成了作用域闭包
function foo() { var a = 100 function bar() { console.log(a) } return bar // 通过函数名来返回函数的引用 } var baz = foo() // 外部变量引用了foo函数内部的bar函数 baz() //形成了闭包
二、作用域闭包的几种代码实现方式
1. 函数返回一个内部函数,代码形式如上
2. 函数返回一个包含方法的对象
function foo() { var a = 100 function bar() { console.log(a) } return { bar: bar } } var baz = foo() baz.bar()
3. ECMAScript模块或commonjs模块
var a = 100 function foo() { console.log(a) } export {foo } // esm模块方式 module.exports = { foo } //commonjs模式
4. 函数内部执行回调函数
function foo() { var a = 100 setTimeout(function(){ console.log(a) }, 1000) }