闭包与作用域原理简解

闭包与作用域原理简解


闭包看似高大上其实只是js作用域的副产物,但是依靠他我们可以实现接近java,c++语言的私有变量.


示例代码如下

function myfunction(){
var liein=0;
this.lieout=function(){
        liein++;
        console.log(liein);
    }
}

myclass=new myfunction();
myclass.lieout();

结果如下


作用域,顾名思义,它所能够作用,即增删改查到的地方

在运行时,电脑会自动定义词法环境,这其中有函数环境以及全局环境,用以跟踪作用域
全局环境不必多说,就是全局变量等东西所在的环境
而函数环境以示例来说myfunction环境中就由liein以及一个创建对象变量行为组成
每一个函数运行时都会有如下检索变量的顺序:自身的函数环境 --> 外层的函数环境 --> 全局环境
而这样的运行原理就构成了作用域这个大的框架


说完了作用域我们来说说他是如何实现闭包的

我们首先设置了一个myfunction里面存放了liein变量以及对一个新类创建lieout函数变量
这个函数变量实现了每次运行都对liein加一的功能,并且在控制器输出liein的值
最后我们用myclass对象储存这个函数创建的东西
并且运行该对象的lieout函数
这其中最关键的就是this.lieout=function(){...}这一语句,他将他的外层环境给了对象的lieout 从而形成了一个myclass --> lieout() --> liein这样一条作用域链,使其得以保留 这里也需要强调在这条作用域链依然存在,即还有变量可以连接liein时,他会与全局变量一样占用内存 所以对于闭包我们需要谨防过度使用


end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值