关键词:
你不知道的JavaScript(上卷)
视频选集
欺骗词法:
作用域恶魔
另外一个不推荐使用 eval(..) 和 with 的原因是会被严格模式所影响(限 制)。with 被完全禁止,而在保留核心功能的前提下,间接或非安全地使用 eval(..) 也被禁止了。
隐藏函数内部实现
for 循环永远不会停止
var i 在全局作用域,每次调用 bar 函数就会被重置为3
解决方案之一:
解决方案二:
类似地:模块封装
具名:自身的引用更容易
UMD模式:
块作用域:
js 里面 if else 并没有实现块作用域
with 是一个块级作用域
try catch
es6:let / const
var 改 let,则只作用于块内
变量的声明:编译阶段;
变量的赋值:运行阶段;
函数声明也会提升(比如 下面报的不是 type error : foo is not a func 错误
提升只适用于作用域内
var a=2 并不在外面的作用域,所以console.log(a) 就是 not defined 错误了
重复的 var 声明会被忽略掉(再次声明直接取前续声明的LHS地址),但出现在后面的函数声明还是可以覆盖前面的
函数重复声明:后面的声明会覆盖前面的声明
let 和 const 关键字不会造成提升
!-- .boom-extension-activecursor:>!-- .boom-extension-activecursor:>!-- .boom-extension-activecursor:>
你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)
你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情
你不知道的javascript--上卷--读书笔记2
...以访问它们被定义时所处的作用域中的任何变量,这就是JavaScript的闭包。闭包有哪些应用? 答:函数作为返回值:functionfoo(){vara=2;functionbar(){//bar拥有涵盖foo作用域的闭包,并对它保持 查看详情
作用域闭包《你不知道的javascript(上)》(代码片段)
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是当前词法作用域之外执行。 functionfoo()vara=2;functionbar()console.log(a);//2bar();foo();functionfoo()vara=2;functionbar()console.log(a);returnbar;varbaz=foo();baz();// 查看详情
作用域闭包《你不知道的javascript(上)》(代码片段)
当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是当前词法作用域之外执行。 functionfoo()vara=2;functionbar()console.log(a);//2bar();foo();functionfoo()vara=2;functionbar()console.log(a);returnbar;varbaz=foo();baz();// 查看详情
你不知道的javascript(this)
对this的常见误解 this指向函数本身; this指向函数的词法作用域;this是在运行时进行绑定的,并不是在编写时,它的上下文取决于函数调用时的条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用... 查看详情
你不知道的javascript(上卷)读书笔记之二----词法作用域
...要的工作类型,一种是词法作用域,一种是动态作用域,Javascript采用的是词法作用域,关于动态作用域的有兴趣的可以自行Google。1.词法阶段 首 查看详情
你不知道的javascript-2.词法作用域
考虑以下代码:functionfoo(a){varb=a*2;functionbar(c){console.log(a,b,c);}bar(b*3);}foo(2);//2,4,12在这个例子中有三个逐级嵌套的作用域。 包含着整个全局作用域,其中只有一个标识符:foo。 包含着foo所创建的作用域,其中有三个标识符... 查看详情
你不知道的js系列(7)-欺骗词法作用域(代码片段)
...得不更改作用域,尽管这是不被推荐的,那是什么办法,JavaScript中有两种机制来实现这个目的 evalfunctionfoo(str,a) eva 查看详情
你不知道的javascript(上卷)
第一部分作用域和闭包第1章作用域是什么 1.1编译原理 1.2理解作用域 1.2.1演员表 1.2.2对话 1.2.3编译器有话说 1.2.4引擎和作用域的对话 1.2.5小测验 1.3作用域嵌套 1.4异常 1... 查看详情
js你不知道的javascript笔记——作用域与闭包-编译原理-lhs-rhs-循环与闭包-模块-词法作用域-动态作用域(代码片段)
文章目录1.什么是作用域1.1编译原理1.2JS编译原理①引擎怎么查找变量②LHS与RHS的练习③BB几句1.3作用域链1.4RHS与LHS找不到的情况1.5总结2.JS作用域2.1词法作用域2.2函数作用域关于函数声明与函数表达式立即执行函数表达式( ... 查看详情
你不知道的js(代码片段)
1、作用域 块级作用域let只在函数内部自己的作用域内有效 全局作用域var 函数作用域 找不到作用域抛出ReferenceError变量有了则抛出TypeError 先声明后赋值 函数提升变量提升函数优先,函数声明提升在普通变量之前 函数表达... 查看详情
《你不知道的javascript上卷》学习笔记(代码片段)
第一部分:作用域和闭包一、作用域1.作用域:存储并查找变量的规则2.源代码在执行之前(编译)会经历三个步骤:分词/此法分析:将代码字符串分解成有意义的代码块(词法单元)解析/语法分析:将词法单元流转换成抽象语... 查看详情
js随笔(你不知道的js)
很多开发者不会深入思考程序出现和预期不一样的结果,只会回避并用其他方法来达到目的 一.闭包 无论通过何种方式将函数传递到词法作用域以外,它都会持有对原始定义作用域的引用,无论在何处执行这个... 查看详情
js你不知道的javascript笔记-this-四种绑定规则-绑定优先级-绑定例外-箭头函数(代码片段)
文章目录1.为什么要用`this`2.关于`this`的误解2.1`this`不是指向函数自身2.2`this`不指向函数的词法作用域3.什么是调用栈与调用位置4.`this`的绑定规则4.1默认绑定`fun()`4.2隐式绑定`obj.fun()`隐... 查看详情
《你不知道的js(上卷)》作用域闭包(代码片段)
五、作用域闭包:? 闭包不是神奇的魔法,它只是遵循我们前几章一直介绍的词法作用域书写代码的自然结果。? 闭包是由函数以及声明该函数的词法环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。一... 查看详情
读书笔记你不知道的javascript(上卷)--作用域是什么
...1、理解作用域几个名词的介绍引擎:从头到尾负责整个JavaScript程序的编译及执行过程编译器:负责语法分析及代码生成器等脏活累活作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严... 查看详情
《你不知道的javascript》整理——this
最近在读一本进阶的JavaScript的书《你不知道的JavaScript(上卷)》,这次研究了一下“this”。当一个函数被调用时,会创建一个活动记录(执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方法、... 查看详情
你不知道的js系列(5)-词法作用域(代码片段)
作用域分为两种,一种是词法作用域,一种是动态作用域,我们先看第一种,词法作用域 词法作用域就是定义在词法阶段的作用域(编译器的第一个工作阶段叫做词法化,词法化的过程会对源代码中的字符进行检查)。换句... 查看详情