JavaScript中的匿名函数与闭包

《JavaScript高级程序设计》第七章内容整理。

  • 匿名函数
  • 闭包

匿名函数

JavaScript定义函数的方式:

1.函数声明(语法形式如下)

1
2
3
function functionName(arg0,arg1,arg2){
//函数体
}

重要特征: 函数声明提升 ,即执行代码之前会先读取声明。

2.函数表达式(常用语法形式如下)

1
2
3
var functionName = function(arg0,arg1,arg2){
//函数体
};

这种情况下创建的函数也叫 匿名函数
重要特征:函数表达式与其他表达式一样,在使用前必须赋值,不然会出错。

闭包

概念:

闭包是指有权访问另一个函数作用域中的变量的函数。通俗的讲,当在函数内部定义了其他函数时,就创建了闭包。闭包有权访问包含函数内部的所有变量

原理:

  • 在后台环境执行中,闭包的作用链包含着它自己的作用域、包含函数的作用域和全局作用域。
  • 通常,函数的作用域及其所有变量都会在函数执行完结束后被销毁。
  • 但是,当函数返回了一个闭包时,这个函数的作用域将会一直在内存中保存到闭包不存在为止。

注意:创建闭包必须维护额外的作用域,所以过度使用它们可能会占用大量内存。