闭包概念及练习题

什么是闭包(闭包函数):

定义:定义在一个函数内部的函数

闭包的作用:

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、闭包的所用,锁住父函数的变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值