闭包是一种特殊的语法结构,它可以让函数在定义以后可以访问它被定义时候的作用域中的变量,从而实不同的作用域中共享变量的功能。它的定义场景一般有以下几种:
1. 封装变量
function getName(){ var name = 'Jack'; return function(){ return name; } } var getNameFunc = getName(); console.log(getNameFunc()); // 输出 Jack
上面的例子中,变量name被封装在函数getName()中,通过闭包,变量name在外部仍然可以被访问,从而实现封装变量的功能。
2. 实现延迟执行
function sayHi(){ console.log('Hi'); } setTimeout(function(){ sayHi(); }, 3000);
上面的例子中,函数sayHi()被延迟执行了3秒,这里的sayHi()就是一个闭包,它可以在函数setTimeout()的作用域中被访问。
3. 实现模块化
- 列表项1:定义一个模块文件module.js:
// module.js function sum(a, b){ return a + b; } function sub(a, b){ return a - b; } module.exports = { sum: sum, sub: sub }
- 列表项2:在另一个文件中引用module.js:
// index.js var module = require('./module.js'); console.log(module.sum(1, 2)); // 输出 3 console.log(module.sub(1, 2)); // 输出 -1
- 列表项3:通过闭包,函数sum()和sub()可以在index.js中被访问,从而实现模块化。
闭包可以用来封装变量,实现延迟执行,实现模块化等功能,可以说是javascript中一个重要的语法结构。