![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
你不知道的Javascript
文章平均质量分 85
你不知道的JavaScript(上卷)读书笔记
Zoey Chou
这个作者很懒,什么都没留下…
展开
-
《你不知道的JS(05)》---作用域闭包
1.闭包的基本概念 1.1 什么是闭包(闭包的形成) 当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这时就产生了闭包。(也可以说闭包是:函数可以访问不属于自身作用域范围内的变量 的现象) 1.2 闭包的应用场景 定时器,事件监听,ajax,跨窗口通信,Web Workers 【tips】在上述应用中,只要使用了回调函数,就是在使用闭包 回调函数: 被作为实参传入另一函数,并在该外部函数中被调用,用以来完成某些任务的函数 2.闭包与循环 2.1 循环中的顺序流 // 依次输出1原创 2021-04-05 10:17:26 · 341 阅读 · 0 评论 -
《你不知道的JS(04)》---提升
提升 1.为什么会存在“提升” 编译器的工作: 根据第一章中的介绍,我们可以知道,引擎会在JS代码执行之前首先对其进行编译。编译阶段其中一部分工作就是找到所有的声明,并用合适的作用域将它们关联起来。 编译完后才执行: 包括变量和函数在内的所有声明都会在任何代码执行之前首先被处理(代码虽是顺序执行,但它是在编译完成之后才开始的) 仅声明提前: 声明和赋值是两件事,即使它们被写在同一行代码里,eg:var a = 2; 上述代码会被看成两句话:var a和a = 2,其中var a变量a的声明会在编译阶段完原创 2021-04-05 10:15:21 · 301 阅读 · 0 评论 -
《你不知道的JS(03)》---函数作用域和块作用域
1.函数作用域 1.1 函数作用域的含义 属于这个函数的全部变量都可以在这个函数的范围内使用及复用(包括嵌套的作用域)。题外提一点:这充分利用了JS变量能够根据需要改变值类型的“动态”特性。 2.函数存在的意义——隐藏内部实现 2.1 隐藏内部实现的意义 遵循软件设计中“最小暴露”原则,保持变量原有的私有特性 规避同名标识符之间的冲突,避免其导致的值错误覆盖等问题 2.2 隐藏内部实现的常用方法 全局命名空间: 在导入第三方库时,这些库通常会在全局作用域中声明一个名字足够独特的变量,通常是一个对象,这原创 2021-04-05 10:13:52 · 349 阅读 · 0 评论 -
《你不知道的JS(02)》---词法作用域
1 词法阶段 1.1 什么是词法阶段 编译器的第一个工作阶段,即上一章中编译原理的第一步:将字符串拆分成有意义的词法单元的过程。 1.2 什么是词法作用域 在词法阶段定义的作用域。也就是说,词法作用域仅由你在书写代码时将变量和块作用域写在哪有关,与它在哪被调用或如何调用无关。 1.3 词法作用域可以更改吗 原则上来讲,变量和块作用域在定义时其词法作用域就已经生成了,大部分情况下是不可更改的。但事实上有一些欺骗词法作用域的方法,虽然保持词法作用域根据书写位置生成的自然关系不变是最佳实践。 1.4原创 2021-04-05 10:12:01 · 134 阅读 · 0 评论 -
《你不知道的JS(01)》---作用域是什么
1.编译原理 1.1 在传统编译语言的流程中,程序中的一段代码在执行前,都要经历以下三个步骤: 分词/词法分析:简单来讲,就是将字符组成的字符串分解成(对编程语言来讲)有意义的代码块,即词法单元。 解析/语法分析:将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树(AST,Abstract Syntax Tree 抽象语法树)。 代码生成:将AST转换成可被执行的代码的过程。 对于编译原理,了解到这里差不多,若时间充裕可另行研究。 1.2 JS与其他语言编译时的不同之处: J原创 2021-04-05 10:10:32 · 151 阅读 · 0 评论