Javascript中的作用域链与闭包

Javascript中有两个十分重要的概念–作用域链和闭包。


我是这样理解作用域链的,在一个函数中,函数内部所有可以访问的变量,排成了一个栈,想根据某个变量名访问变量时,就从栈顶开始向下搜索,搜到的第一个就算是找到了。那么,这个栈是怎么排列的呢?栈顶,是函数的内部变量以及arguments,栈顶下面,是包含这个函数的内部变量和arguments,往下依次类推。


闭包又是什么呢?闭包是一个函数,这个函数突破了作用域链,可以访问另一个函数作用域中的变量。下面是一个例子:

function createFunction(name){
          return function(){
               alert(name); }; } 
        var printName = createFunction("John"); 
        printName();//John
createFunction()中的匿名函数即是一个闭包。由于createFunction()是返回的匿名函数的父函数,所以匿名函数的作用域链上有createFunction(name)的参数即name,所以可以访问到;createFunction(name)运行完毕后,其活动对象不会被销毁,依然留在内存中,因为它的参数name还在被返回的匿名函数引用着。这样做会带来方便,但是也会多占内存,所以要慎用闭包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值