第十章 函数 小结

Posted by CodingWithAlice on October 11, 2024

​ 在JavaScript编程中,函数表达式是一种非常有用的技术。

以下总结了函数表达式的特点:

  1. 函数表达式不同于函数声明。声明函数要求有名字,但是函数表达式不需要。没有名字的函数表达式也叫做匿名函数(也称为 拉姆达函数)。ES6新增的箭头函数和标准函数也有一些区别。
  2. JavaScript 中函数定义与调用时的参数极其灵活。arguments 对象,以及 ES6 新增的扩展操作符, 可以实现函数定义和调用的完全动态化。函数内部也暴露了很多对象和引用,涵盖了函数被谁调用caller、使用什么调用new.target、调入时传入了什么参数等信息。
  3. JS引擎可以优化符合尾调用优化条件的函数,节省栈空间(对递归函数的优化)
  4. 函数可以在创建之后立即调用,执行其中代码之后却不留下对函数的引用。(立即调用的函数表达式如果不在包含作用域中将返回值赋给一个变量,则其包含的所有变量都会被销毁)

闭包

【原理】:闭包的作用域链中包含自己的一个变量对象,然后是包含函数的变量对象,直到全局上下文的变量对象。通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,闭包在被函数返回之后,其作用域会一直保存在内存中,直到闭包被销毁

【作用】:虽然 JavaScript 没有私有对象属性的概念,但可以使用闭包实现 公共方法/特权方法,访问位于包含作用域中定义的变量。

特权方法(可以访问私有变量的公共方法叫作特权方法。)
  • 可以使用构造函数模式、原型模式来实现自定义函数类型的特权方法,也可以使用模块模式、增强的模块模式来实现单例的特权方法。

《红宝书》-25

《红宝书》-26