js的闭包(closure)及3个案例

先看看他《JavaS高级程序设计》在里面的定义

闭包(closure)指有权访问另一个函数作用域的变量的函数

可知闭包(closure)就是一个函数,可通过闭包访问某些函数里面的变量,且被访问的那个变量所属的函数就是一个闭包(closure)

function fn(){				//一个闭包(closure),a被函数f访问
    var a=10;
    f();
    function f() {			
        console.log(a);			//输出10
    }
}
fn();

在这里插入图片描述


在Chrome里面调试的图:


在这里插入图片描述


实例1:


function fn(){			//一个闭包
    var a=100;			//局部变量
    
    function f() {
        console.log(a);
    }
    return f;			//返回一个函数,所以fn也是一个高阶函数
}
var ff=fn();
ff();				//这样就实现了在全局作用域下访问了局部作用域的变量

在这里插入图片描述
闭包的主要作用:扩大了变量的作用范围

实例2:

var uname='window';			
var object={
    uname:'object',
    funct:function () {
        return function () {		
            console.log(this);		//this指向window对象
            return this.uname;		//打印出 window字符串
    
        };
    }
};
console.log(object.funct()());		//没有闭包

在这里插入图片描述

实例3:

var uname='window';
var object={
    uname:'object',
    funct:function () {				//是一个闭包
        var that=this;				//this指向object对象
        return function () {
            console.log(this);			//this指向window对象
            return that.uname;			//打印出 object字符串
        }
    }
};
console.log(object.funct()());

在这里插入图片描述
本文只用于个人学习和记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值