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

来源:互联网 发布:有关大数据时代的论文 编辑:程序博客网 时间:2024/05/22 03:40

1.3 函数是一等对象

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

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

 

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

 

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

 

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

 

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

原创粉丝点击