JavaScript基础学习笔记(2014.12.9)

1、作用域、嵌套函数和闭包

  在JavaScript中,只有函数具有作用域。下面示例说明了JavaScript中作用域的特点:

function foo(){

var a = 10;

function bar(){

a* = 2;

}

bar();

return a;

}

当bar在foo中被调用时它能够访问a,这可以理解。但是如果bar是在foo外部被调用呢?

function foo(){

var a = 10;

function bar(){

a* = 2;

return a;

}

return bar; //返回的是一个指针而不是函数

}

var baz = foo(); //baz is now a reference to function bar.

baz(); //return 20.

baz(); //return 40;

baz(); //return 80.


var blat = foo();  //blat is another reference to bar.

blat(); //retruns 20,because a new copy of a is being used.

函数是运行在定义它们的作用域中(本例中是foo内部的作用域),而不是运行在调用它们的作用域。只要bar被定义在foo中,它就能访问在foo中定义的所有变量,即使foo的执行已经结束。

这即使闭包的一个例子。在foo返回后,它的作用域被保存下来,但只有它返回的那个函数能够访问作用域。在示例中,baz和blat各有这个作用域及a的一个副本,而且只有他们自己能对其进行修改。返回一个内嵌函数是创建闭包最常用的手段。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值