JavaScript中闭包学习 --2016.4.7

JavaScript中闭包学习 –2016.4.7

最近在看prototype.js源码,发现里面有很多的有意思的代码,了解到了javascript的闭包思想,然后通过网上的资料和自己敲代码,来学习它,记下来梳理下思路,做个笔记。

定义:

维基百科定义:引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例
简单理解:where a function remembers what happens around it

常见方式:

一般常见的方式是定义一个function a在这个function 的内部返回一个b函数,b函数对a某个变量引用

  function a(){
    return function b (){

    }
}

要理解闭包首先需要了解全局变量和局部变量的概念 ,注意的地方是函数内部没有 用 var 申明的变量是全局变量,没有申明的函数也是一样(函数其实也是一种变量)

  var a = 1;
    var d = 4;
    function f1(){
        var b =2;
            c =3;
        var d = 5;
        console.log(a)  //1
        console.log(b);//2
        console.log(c);//3
        console.log(d);//5
    }
    f1();
    console.log(a);//1
    console.log(b);//error
    console.log(c)//3
    function f2(){

    }

简单例子
f2是使用闭包,之所以a的值能被保留是因为 f2Inner这个匿名啊函数是附给全局变量的,因此f2Inner一直都在内存中
而f2被f2Inner引用,因此f2也一直在内存中,用闭包的好处,是将变量放在了函数内部,不会被污染,而f3这种申明
全局变量也是可以实现这种功能,全局变量是容易被污染的。

“`javascript
function f2(){
var a = 1;
add = function(){a+1} //add是一个全局变量,是可被调用的

    return function f2Inner(){
        console.log(n);
    }
}
f2() //n=1
add();//n=2
f2() // n =3

//不使用闭包实现f2的功能
var a = 1;
function f3(){
console.log(a);
add = function(){a+1};

}
f3();
add();
f3();

“`

常见用法:

“`javascript
var test1 = function () {
var name = “The Window”;
var object1 = {
name: “My Object”,
getNameFunc1: function () {
return function () {
return this.name;
};
},
getNameFunc2: function () {
var that = this;
return function () {
return that.getNameFunc2();
}

    }
}
console.log(object1.getNameFunc1()) // TheWindow
console.log(object1.getNameFunc2()) //My Object

“`
###javascript中一些方法常见的闭包

“`javascript
var closeure = {
test3:function(){
function main1(links){
for (var i=0; i

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值