闭包
全局变量在函数内部可以访问。
var n = 999; function f1() { console.log(n); } f1(); // 999
函数内部定义的变量,外部无法访问。
function f1() { var n = 999; } f1(); console.log(n); // 报错
外部访问函数内定义的变量。在函数里再定义一个函数。
function f1() { var i = 0; function f2() { console.log(i) } return f2; } f1()(); // 0
特点:f2在f1里面定义的,f1需要返回f2
用途:1. 读取函数内部的变量; 2. 让变量保留在内存中。
function f1() { var n = 1; nAdd = function() { n = n + 1; } function f2() { console.log(n); } return f2; } f1()(); // 1 nAdd(); f1()(); // 2
优缺点:
优点:
- 有利于封装
- 可以访问局部变量
缺点:
- 内存占用严重,引起内存泄漏