闭包
1. 简介
闭包是一种现象,一个作用域(包括全局作用域)可以访问另一个作用域(不包括全局作用域)中的变量
2. 形式
一般是一个函数中返回一个函数
3. 作用
- 外部外部可以访问函数内部成员
- 让函数内部的成员始终存活于内存中 (函数执行完成后,函数内部的成员会被销毁,但是一旦发生闭包,就不会被销毁)
4. 比如
function add() { var a = 1; return function() { return a; } } console.log(add()()) //结果为a的值: 1
5. 经典的闭包案例对比
- 发生了闭包
var name = 'zs'; // 等价于 window.name = 'zs' var obj = { name: 'ls', age: 18, getName: function() {
// 方法中this指向构造函数创建的实例对象 var that = this; return function() { return that.name; } } } console.log(obj.getName()()) // 结果为obj.name的值 ls
- 未发生闭包
var name = 'zs'; // 等价于 window.name = 'zs' var obj = { name: 'ls', age: 18, getName: function() { return function() { // 普通函数内部的this指向window,相当于返回的是 window.name return this.name; } } } console.log(obj.getName()()) // zs