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
更多专业前端知识,请上 【猿2048】www.mk2048.com