函数是javascript 编程中最有用也最通用的工具。 ECMAScript 6 新增了更强大的语法特性,从而让开发者可以更有效地使用函数。
函数表达式与函数声明是不一样的。 函数声明要求写出函数名称, 而函数 表达式并不需要。没有名称的函数表达式也被称为匿名函数。
ES6 新增了类似于函数表达式的箭头函数语法,但两者也有一些重要区别。
javascript 中函数定义与调用时的参数极其灵活。 arguments 对象 , 以及ES6 新增的扩展操作符,可以实现函数定义和调用的完全动态化。
函数内部也暴露了很多对象和引用,涵盖了函数被谁调用、使用什么调用,以及调用时传入了什么参数等信息。
javascript 引擎可以优化符合尾调用条件的函数,以节省栈空间。
闭包的作用域链中包含自己的一个变量对象, 然后是包含函数的变量对象,直到全局上下文的变量对象。
通常, 函数作用域及其中的所有变量在函数执行完毕后都会被销毁。
函数可以在创建之后立即调用,执行其中代码之后却不留下对函数的引用。
立即调用的函数表达式如果不在包含作用域中返回值赋给一个变量,则其包含的所有变量都会被销毁。
虽然javascript 没有私有对象属性的概念 , 但是可以使用闭包实现公共方法,访问位于包含作用域中定义的变量。
可以访问私有变量的公共方法叫作特权方法。
特权方法可以使用构造函数或原型模式通过自定义类型中实现, 也可以使用模块模式或模块增强模式在单例对象上实现。