什么是闭包(闭包函数):
定义:定义在一个函数内部的函数
闭包的作用:
1.可以访问父函数中的变量
2.可以锁住父函数的变量
闭包的本质:可以让他的父函数作用域永恒
练习题
第一题:
var name = '懒洋洋'
var object={
name:'喜洋洋'
getName:function(){
var name = '沸羊羊'
var inner function(){
var name=“美羊羊”;
console.log(this.name);
}.bind(this) //当bind在此时this指向的当前对象
inner();
}.bind(this) //当前bind在此时this指向window
}
object.getName();
第二题:
function Person(name) {
var name = '小明';
this.sayName= function() {
console.log(this.name)//打印 小白,this指向实例化对象
}
this.changeName= function(newName) {
this.name = newName;
}}
var a = new Person(“小丽”);
a.changeName('小白');
a.sayName();
第三题:
function fn() {
var name = 'hello'
setName = function (n) {
name = n;
}
getName = function () {
return name;
}
return {
setName: setName,
getName: getName
}
}
var fn1 = fn(); //函数返回一个对象,
/*return {
setName: setName,
getName: getName
}*/
console.log(fn1.getName()); // hello;返回的是一个对象,作用域查找
fn1.setName('world'); //将world赋值给name,闭包的第二作用,锁住变量
console.log(fn1.getName()); //world 此时的name已经修改
第四题:
// 7(重点;)
var arr = [];
for (var i = 0; i < 3; i++) {
// console.log(i);
arr[i] = (function (i) {
console.log(i);
return function () {
console.log(i);
}
})(i);
// console.log(i);
}
arr[0]();
arr[1]();
arr[2]();//先执行return前面的三次console.log,后执行return后面的自动执行函数
//打印:0、1、2、0、1、2
闭包应用总结:
1、闭包、this的指向 预解析 作用域链的查找规则
2、函数调用的结果就是函数的返回值。
3、普通函数调用不是异步的。
4、闭包的所用,锁住父函数的变量