闭包

**

闭包啊闭包

**
闭包是面试时常常会被问到滴!
闭包,是javascript比较重要的一个概念,对初学者是一个特别抽象的概念,特别是ECMAScript规范给的定义,如果没有实战过,很难理解.
**

闭包demo

**
闭包其实无处不在,比如:jQuery,zepto的核心代码都包含在一个大的闭包之中,一个最简单最原始的闭包demo:

function a(){
	function b(){
		console.log("Hellow 大哥");
	}
	return b;
}
var c = a();
c();//Hellow 大哥

这是最简单的闭包了.
和普通的函数有什么不同,剖析一下:

  • 定义普通函数a
  • 在a中定义普通函数b
  • 在a中返回b
  • 执行a,并把a的返回结果赋值给变量c
  • 执行c

五步总结成一句话就是:
函数a的内部函数b被函数a外的一个变量c引用.
再加工一下就变成了闭包的定义:
当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包
执行上面五步就已经定义了一个闭包,这就是闭包

闭包的应用
当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但是又不会"污染"全局的变量时,就可以用闭包来定义这个模块.
1.函数作为返回值

function F1(){
	var a = 100;
	return function(){
		console.log(a)
	}
}
var f1 = F1();
var a = 200;
f1();//100

2.函数作为参数传递

function F1(){
   var a = 100;
    return function(){
      console.log(a)    
    }
}
var f1 =F1();
function F2(fn){
  var a = 200;
     fn();
}
F2(f1)//调用会打印出100,而不是200

闭包的用途

  • 读取其他函数内部的变量
  • 让变量的值始终保存在内存中
    javascript中闭包的应用都有关键词return,引用javascript秘密花园中的一段话就是因为:
    闭包是javascript一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量.因为函数式javascript中唯一拥有自身作用域的结构,因此闭包的创建依赖于函数

来段代码:

function f1(){
	var n = 0;
	function f2(){
		n++;
		console.log(n);
	}
	return f2;
}
var temp = f1();
temp();//1
temp();//2

在以上代码中,f2被定义在f1函数的内部,所以f1定义的局部变量n,f2是可以访问到的,但是如果在f2中定义的变量,f1是访问不到的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值