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()());

在这里插入图片描述

发布了24 篇原创文章 · 获赞 0 · 访问量 249

猜你喜欢

转载自blog.csdn.net/weixin_45969777/article/details/104878328
今日推荐