你不知道的javascript学习笔记1——作用域

前端[色色] 前端[色色]     2022-09-08     301

关键词:

处理程序三要素:

引擎:编译与执行过程。

编译器:语法分析与代码生成等。

作用域:收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。

 

示例:

var a=2;的解析过程:

1.编译器 询问 作用域 是否已经有该名称的变量

是:忽略该声明,继续执行;

否:声明一个新变量,命名为a;

 

2.编译器为引擎生成代码

引擎运行首先询问作用域,在当前作用域集合中是否存在一个a的变量:

是:引擎会使用这个变量;

否:引擎继续查找该变量;

  找到了:将2赋值给a。

  没找到:抛出异常。

 

总结:

变量赋值执行两个动作:

1.编译器声明一个变量;

2.运行时引擎在此作用域中查询(LHS查询)该变量,能找到就赋值。

 

引擎查询方式:

"L"和"R"分别代码左侧和右侧。什么东西的左侧和右侧?是一个赋值操作的左侧和右侧。

当变量出现在赋值操作的左侧时进行LHS查询,出现在右侧时执行RHS查询。

 

LHS查询:

1.赋值操作的目标是谁;

2.查找的目的是对变量进行赋值(=操作符或调用函数时传入参数的操作)。

 

RHS查询:

1.谁是赋值操作的源头;

2.查找的目的是获取变量的值。

 

报错类型:

ReferenceError异常:

1.严格模式下不成功的LHS(非严格模式下不成功的LHS会导致自动隐藏地创建一个全局变量并不会报异常);

2.不成功的RHS。

 

TypeError异常:

如果 RHS 查询找到了一个变量,但是你尝试对这个变量的值进行不合理的操作,比如试图对一个非函数类型的值进行函数调用,或着引用 null 或 undefined 类型的值中的属性,那么引擎会抛出另外一种类型的异常。

 

 

作用域嵌套规则:

引擎从当前的执行作用域开始查找变量,如果找不到,就向上一级继续查找。

你不知道的javascript--上卷--读书笔记1

作用域是什么?  答:在《你不知道的javascript》书中提到,作用域就是根据名称查找变量的一套规则。古语有“无规矩不成方圆”,但是没有方圆,规矩又给谁用?所以个人理解作用域就是“规矩”+”方圆“。作用域是在创... 查看详情

你不知道的javascript(上卷)读书笔记之二----词法作用域

...要的工作类型,一种是词法作用域,一种是动态作用域,Javascript采用的是词法作用域,关于动态作用域的有兴趣的可以自行Google。1.词法阶段         首 查看详情

你不知道的javascript(上卷)读书笔记之一----作用域

你不知道的Javascript(上卷)这本书在我看来是一本还不错的书籍,这本书用比较简洁的语言来描述Js的那些”坑”,在这里写一些博客记录一下笔记以便消化吸收。1编译原理在此书中,开始便提出:Javascript是一门编译型语言,我... 查看详情

读书笔记你不知道的javascript(上卷)--作用域是什么

...1、理解作用域几个名词的介绍引擎:从头到尾负责整个JavaScript程序的编译及执行过程编译器:负责语法分析及代码生成器等脏活累活作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严... 查看详情

你不知道的javascript-上卷の读书笔记

...;        1— 作用域对JavaScript而言,大部分情况下编译发生 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

你不知道的javascript上卷-读书笔记-第2章词法作用域-2.2欺骗词法(代码片段)

你不知道的JavaScript上卷-读书笔记-第2章词法作用域-2.2欺骗词法作用域`eval`和`with`的缺点作用域JavaScript在ES6以前只有函数作用域。ES6开始支持块作用域:通常就是包裹的范围作用域中查找变量or函数的规则是从当前向... 查看详情

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函数作用域关于函数声明与函数表达式立即执行函数表达式( ... 查看详情

你不知道的javascript--上卷--读书笔记2

...以访问它们被定义时所处的作用域中的任何变量,这就是JavaScript的闭包。闭包有哪些应用?  答:函数作为返回值:functionfoo(){vara=2;functionbar(){//bar拥有涵盖foo作用域的闭包,并对它保持 查看详情

你不知道的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... 查看详情

javascript作用域学习笔记

1、局部变量与全局变量;全局变量首先要知道一点,全局变量的执行环境是全局作用域;全局作用域是最外围的一个执行环境,可以在代码的任何地方访问到。在浏览器中,我们的全局作用域就是window。因此在浏览器中,所有... 查看详情

《你不知道的javascript》——词法/函数/块作用域

 你不知道的JavaScript(上卷)  视频选集1/4P11.作用域是什么P22.词法作用域P33.函数作用域和块作用域P44.提升                   &nb 查看详情

《你不知道的javascript》整理——作用域提升与闭包

最近在读一本进阶的JavaScript的书《你不知道的JavaScript(上卷)》,里面分析了很多基础性的概念。可以更全面深入的理解JavaScript深层面的知识点。 一、函数作用域1)函数作用域就是作用域在一个“Function”里,属于... 查看详情

javascript从作用域到闭包-笔记

读《你不知道的javascript》一书做个笔记;编译原理:   js是一门编译型的语言,与传统编译语言类似,传统编译的过程分为三个阶段;    1.分词/词法分析;2.解析/语法分析;3.代码生成;    js引... 查看详情

javascript学习笔记

...域块级作用域中声明的变量不会影响到外部作用域。二.javascript中的块级作用域1.javascript中的if...else..并不会创建新的作用域,2.javascript是函数级作用域,只有函数才能创建新的作用域varv=‘HelloWorld‘;(function(){console.log(v);//undefine... 查看详情

你不知道的javascript笔记

this和对象原型this是一个很特别的关键字,被自动定义在所有函数的作用域中//foo.count是0,字面理解是错误的    functionfoo(num){        console.log("foo:"+num);    &n 查看详情

你不知道的javascript-2.词法作用域

考虑以下代码:functionfoo(a){varb=a*2;functionbar(c){console.log(a,b,c);}bar(b*3);}foo(2);//2,4,12在这个例子中有三个逐级嵌套的作用域。 包含着整个全局作用域,其中只有一个标识符:foo。 包含着foo所创建的作用域,其中有三个标识符... 查看详情

函数作用域和块级作用域--你不知道的javascript

...能访问的值,但是const声明的是常量,也不能修改函数是JavaScript中最常见的作用域单元。本质上,声明在一个函数内部的变量或函数会在所处的作用域中“隐藏”起来,这是有意为之的良好软件的设计原则。但函数不是唯一的作... 查看详情