阅读:你不知道的JavaScript
Add_a_cat
这个作者很懒,什么都没留下…
展开
-
作用域和闭包(二) 词法作用域
作用域有两种主要的工作模型。 第一种最为普遍,被大多数编程语言所采用的词法作用域。 另一种叫做动态作用域,仍有一些语言在使用(比如Bash脚本、Perl中的一些模式等) 2.1 词法阶段 2.2 欺骗词法 2.2.1eval 2.2.2 with 反正都不太推荐使用,简单看一遍就行了 2.2.3 性能 2.3 小结 ...原创 2019-06-07 11:09:01 · 177 阅读 · 0 评论 -
作用域和闭包(五) 闭包
废话少说,总结几句 函数在定义时的词法作用域以外的地方被调用。闭包使得函数可以继续访问定义时的词法作用域 无论使用何种方式对函数类型的值进行传递,当函数在别处被调用时都可以观察到闭包 无论通过何种手段将内部函数传递到所在的词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个函数都会使用闭包 如果将(访问它们各自词法作用域的)函数当做第一级的值类型并到处传递,你就会...原创 2019-06-07 11:09:33 · 197 阅读 · 0 评论 -
作用域和闭包(四) 提升
当你看到var a=2 时, JavaScript将其看作两个声明, var a; 定义声明在编译阶段进行 a=2 ; 赋值声明会被留在原地等待执行阶段 只有声明本身会被提升,而赋值或其他运行逻辑会被留在原地。如果提升改变了代码执行的顺序,会造成非常严重的破坏。 函数声明和变量声明都会被提升。但是函数会先被提升,然后才是变量。 微妙的差异,赋值并没有被提...原创 2019-06-07 11:09:18 · 180 阅读 · 0 评论 -
作用域和闭包(三) 函数作用域和块作用域
3.1 函数中的作用域 3.2 隐藏内部实现 举个例子 function doSomething(a){ function doSomethingElse(a){ return a-1; } var b; b=a+doSomethingElse(a*2); console.log(b*3); } doSomethi...原创 2019-06-07 11:09:08 · 272 阅读 · 0 评论 -
作用域和闭包(一)
1.1 编译原理 在传统编程语言的流程中,程序中的一段源代码在执行前会经历三个步骤,统称为“编译”。 分词/词法分析(Tokenizing/Lexing) 解析/语法分析(Parsing) 代码生成 1.2 理解作用域 LHS:试图找到变量的容器本身(变量出现在赋值操作左侧),查找的目的是对变量进行赋值 RHS:简单地查找某个变量的值(右侧),目的是获取变量的值 1.3 作用域...原创 2019-06-07 11:08:45 · 166 阅读 · 0 评论