
2025-02-07 日报 Day90

今日的鸡汤
那些读过的书,都会在未来铺就你脚下的路;学过的每一点知识,都会在某一天,以意想不到的方式回馈到你身上。
今日学习内容
1、JS 红皮书 P320-321 第十章:函数
今日笔记
1、模块增强模式: 另一个利用模块模式的做法是在返回对象之前先对其进行增强。这适合单例对象需要是某个特定类型的实例,但又必须给它添加额外属性或方法的场景。来看下面的例子:
1 | let singleton = (function () { |
1 | let application = (function () { |
2、函数是 JavaScript 编程中最有用也最通用的工具。ECMAScript 6 新增了更加强大的语法特性,从而让开发者可以更有效地使用函数。
函数表达式与函数声明是不一样的。函数声明要求写出函数名称,而函数表达式并不需要。没有名称的函数表达式也被称为匿名函数。
ES6 新增了类似于函数表达式的箭头函数语法,但两者也有一些重要区别。
JavaScript 中函数定义与调用时的参数极其灵活。arguments 对象,以及 ES6 新增的扩展操作符,
可以实现函数定义和调用的完全动态化。
函数内部也暴露了很多对象和引用,涵盖了函数被谁调用、使用什么调用,以及调用时传入了什么参数等信息。
JavaScript 引擎可以优化符合尾调用条件的函数,以节省栈空间。
闭包的作用域链中包含自己的一个变量对象,然后是包含函数的变量对象,直到全局上下文的变量对象。
通常,函数作用域及其中的所有变量在函数执行完毕后都会被销毁。
闭包在被函数返回之后,其作用域会一直保存在内存中,直到闭包被销毁。
函数可以在创建之后立即调用,执行其中代码之后却不留下对函数的引用。
立即调用的函数表达式如果不在包含作用域中将返回值赋给一个变量,则其包含的所有变量都会被销毁。
虽然 JavaScript 没有私有对象属性的概念,但可以使用闭包实现公共方法,访问位于包含作用域中定义的变量。
可以访问私有变量的公共方法叫作特权方法。
特权方法可以使用构造函数或原型模式通过自定义类型中实现,也可以使用模块模式或模块增强模式在单例对象上实现。