Javascript 设计模式——1.3 函数是一等对象

1.3 函数是一等对象

在JavaScript中,函数是一等对象。它们可以存储在变量中,可以作为参数传给其他函数,可以作为返回值从其他函数传出,还可以在运行时进行 构造。在与函数打交道时,这些特性带来了极大的灵活性和极强的表达能力。在阅读本书时你会体会到a,这正是用以构建传统的面向对象框架的基础。

可以用function() { ... }这样的语法创建匿名函数。它们没有函数名,但可以被赋给变量。下面是一个匿名函数的示例:

 

这个函数在定义之后便立即执行,甚至不用赋给一个变量。出现在函数声明之后的一对括号立即对函数进行了调用。括号中空无一物,但也并不是非得如此:

 

这个匿名函数与前一个等价,只不过变量没有在函数内部用var声明,而是作为参数从外部传入而已。这个函数也可以返回一个值。这个返回值可以被赋给一个变量:

 

匿名函数最有趣的用途是用来创建闭包。闭包(closure)是一个受到保护的变量空间,由内嵌函数生成。JavaScript具有函数级的作用 域。这意味着定义在函数内部的变量在函数外部不能被访问。JavaScript的作用域又是词法性质的(lexically scoped)。这意味着函数运行在定义它的作用域中,而不是在调用它的作用域中。把这两个因素结合起来,就能通过把变量包裹在匿名函数中而对其加以保 护。你可以这样创建类的私用(private)变量:

 

变量foo和bar定义在匿名函数中。因为函数baz定义在这个闭包中,所以它能访问这两个变量,即使是在该闭包执行结束后。这是一个复杂的话题,本书中会多次涉及。在第3章讨论封装的时候将对这种技术详加讲解。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值