精读Javascript系列(一) 变量 、 初识词法环境

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

前言

其实,我觉得Javascript核心中重要的东西并非是从旧版本扩展来的高大上的语法,例如解构赋值啊、展开语法和剩余参数(嘛……虽然的确是很666),但是用好这些,其实都建立在你对变量的认识上(常有人不知道什么是左值或右值的区别)正因如此,我觉得了解一个Javascript还是从最基本做起,就是了解一下何为变量吧。
本文其实也并非完全基础,还是建立在对Javascript有一定了解之上的,至少对对象要有一定的认知。开始吧。

变量与数据

什么是变量?
越简单的问题答案往往越是让人感到意外,多数人的答案都与有关;事实上变量就是程序可操作的存储区(术语内存空间),在Javascript程序运行时,存储区(术语就是内存空间)可以保存我们所需的任何东西,代码、数据……等等。然后可以将变量保存的数据大致上分割为两类:原始类型(同基本类型)和引用类型;从变量中取出来的数据就是值,把一个值放到变量中时,该值就又变成了数据。

Javascript和其他语言相似,变量也需要被声明才能实际存在,声明后的变量称之为实例化,为变量赋予一个值(默认为undefined)时,称之为变量的初始化,只是实例化而未初始化的变量都处于uninitialized状态。

例如:

let a = a ;         // (*)
console.log(a);
// ReferenceError: can't access lexical declaration `a' before initialization

很完美的报错了(在(*)标志的位置),提示我们没有初始化这个变量时就无法使用。这是不同于C++这类底层的变量的地方。其实这种现象在Javascript有一个极为高大上的名字:暂存死区,等过几章节我就说明产生的原因。

(忘了说了,在变量声明也需要一个名字,术语称作标识符,我觉得不补充也不影响什么……)

不过Javascript另外特殊的地方在于,它对var声明的变量是可以自动初始化的,Javascript会自动会为var声明的变量赋予一个undefined值。
例如:

var a = a;
console.log(a);    // undefined.

看吧,明明都差不多,结果却全然不同。
但是实际上却没什么卵用,见下面的代码:

var a = a;
console.log(a+2);   // NaN
</
精读Javascript系列(四)过渡篇:左值This绑定 前言: 在前三篇中,可以将学习路线图归纳为以下: 变量标识符 —> 词法环境作用域 —> 词法环境环境记录 —> 词法环境执行上下文 执行上下文执行栈 —> 执行栈任务序列 —> 事件循环入门 。 现在基本上可以看出,Javascript进阶的路程脉络了。所有的内容都是围绕核心进行描述总结的,并且尽可能避免知识断层或是概念套路化这种情形。否则真的,即便是尝试进阶Javascript多少次,可能也要重新来遍喜滋滋。 我的资料大部分来自github大佬博客、ES8标 阅读详情

相关推荐

精读Javascript系列(五) 函数闭包

前言 本文专门介绍闭包,但事实上,闭包的难点并不在概念,而是在词法环境的嵌套上。只要将词法环境的嵌套关系整理清楚,闭包就瞬间被克服了。 总之,先不废话了,正文开始。 闭包 如果个函数在定义的词法环境外运行并记住了定义时的词法环境,这样的现象就可以称作函数闭包(Function Closure) 举个简单例子: function f(x=0){ var count=x; function getCount(){ return

krfwill的博客 434

js 图解变量环境词法环境、执行上下文,作用域链查找过程

看到这个标题的时候心里应该是这样的 js代码运行过程 编译是把代码拿过来创建执行上下文,并创建变量环境词法环境、可执行代码,将执行上下文压入执行栈。 执行是在当前执行上下文环境下执行可执行代码。 变量环境:通过var声明或function(){}声明的变量存在这里 词法环境:通过let const with() try-catch创建的变量存在这里 可执行代码:变量声明提前后,剩下的...

一袋米要扛几楼_ 4204

硬件手册——PT100精密测温电路

PT100精密测温电路 、需求分析 根据题目要求为:测温范围为0-100℃、测温精度要求为±1℃。由于铂电阻具有精度高、性能可靠、稳定性好的特点,且铂电阻的电阻相对变化率温度的关系曲线线性度最好,故选择铂电阻作为敏感元件。而在国标中,铂电阻有几种不同的标准,如PT100、PT1000。分别对应着0摄氏度下铂电阻的阻值为100R和1000R,由于需要考虑铂电阻的自发热问题,所以尽量选择阻值小的铂电阻,故选择PT100为最终型号。 二、电路设计 2.1 热电阻接法 热电阻测温电路有多种接法,其中三线制会导致

weixin_41655430的博客 5万+

JS词法环境和执行上下文

JavaScript门解释性动态语言,但同时它也是门充满神秘感的语言。如果要成为名优秀的JS开发者,那么对JavaScript程序的内部执行原理要有所了解。本文以最新的ECMA规范中的第八章节为基础,理清JavaScript词法环境和执行上下文的相关内容。这是理解JavaScript其他概念(let/const暂时性死区、变量提升、闭包等)的基础。本文参考的是最新发布的第十代ECMA-262标准,即ES2019。

hellocoder2029的博客 620

词法环境&变量环境

什么,你还不清楚JS执行机制?!

weixin_62061392的博客 865

ES6中的JS执行上下文

js的执行上下文整体过程:创建变量对象(Variable Object):JavaScript引擎会创建变量对象,用于存储当前执行上下文中的变量、函数声明和形参等信息。建立作用域链(Scope Chain):JavaScript引擎会建立个作用域链,用于解析变量和函数的作用域。确定this指向:JavaScript引擎会确定当前执行上下文中的this指向。执行代码:JavaScript引擎会执行当前执行上下文中的代码,包括变量赋值、函数调用、条件语句、循环语句等。

十九万里的博客 621

精读Javascript系列(三) 执行上下文、 执行栈、初识事件循环

前言 这时可以接触真正实用的东西了,毕竟变量也不能代表整个Javascript语言,虽然有些不可思议,但变量的确是Javascript必经之路之,关于变量的奇特行为数不胜数(真的是这样),不过这些我想高阶Javascript都努力回避这些,新手也不懂,所以我就跳过了。 下面的这些概念,无论是执行上下文、 还是执行栈,它在规范中的概念都很抽象,很多内容的理解实际靠的都是想象力,若有错误之处,还请指正。 执行上下文 简而言之,执行上下文(Execution Context)是正在运行的可执行代码所处环境的抽象

krfwill的博客 5055

精读《用 Babel 创造自定义 JS 语法》

React 16.8 于 2019.2 正式发布,这是个能提升代码质量和开发效率的特性,笔者就抛砖引玉先列出些实践点,希望得到大家进步讨论。然而需要理解的是,没有个完美的最佳实践规范,对个高效团队来说,稳定的规范比合理的规范更重要,因此这套方案只是最佳实践之。Function Component 采用const用React.FC申明 Function Component 组件类型定义 Props 参数类型。用优化渲染性能。用定义 Props 的默认值。}>(null)

qzmlyshao的博客 1186

精读《你不知道的 javascript(上卷)》

精读《你不知道的 javascript(上卷)》 前言 《你不知道的 javascript》是个前端学习必读的系列,让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript个零部件的用途。本书介绍了该系列的两个主题:“作用域和闭包”以及“this和对象原型”。这两块也是值得我们反...

MichaelAn的博客 282

《你不知道的JavaScript》-- 精读

知识点 1.编译原理 程序中的段源代码在执行之前会经历三个步骤:分词/词法分析,解析/语法分析,代码生成,统称为“编译”。 简单说,就是有某种方法可以将var a = 2;的AST转化为组机器指令,用来创建个叫做a的变量(包括分配内存等),并将个值储存在a中。 2.理解作用域 引擎:从头到尾负责整个JavaScript程序的编译及执行过程 编译器:负责语法分析及代码生成等 作用域:负责收...

weixin_34235371的博客 493

[书籍精读] 《你不知道的JavaScript(上卷)》精读笔记分享

写在前面 书籍介绍:JavaScript这门语言简单易用,很容易上手,但其语言机制复杂微妙,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也无法真正理解。本套书直面当前JavaScript开发人员不求甚解的大趋势,深入理解语言内部的机制,全面介绍了JavaScript中常被人误解和忽视的重要知识点。 我的简评:《你不知道的JavaScript系列分上中下三卷,这里是上卷,主要讲解作用域、原型等核心概念相关的。该系列书籍本人觉得就上卷写的不错,中卷有些冗余,下卷讲ES6比较粗糙。这里推

小磊哥er @ 资深研发工程师 765

123. 精读《用 Babel 创造自定义 JS 语法》

1 引言在写这次精读之前,我想谈谈前端精读可以为读者带来哪些价值,以及如何评判这些价值。前端精读已经写到第 123 篇了,大家已经不必担心它突然停止更新,因为我已养成每周...

前端精读周刊 664

你不知道的JS精读(1)

直希望能找到本类似于fluent python之类的JS进阶书,你不知道的JS可以说是久负盛名了,而且这本书的出版日期类似于fluent python,不算很新,但足够称得上时俱进. 话不多说,这次精度系列准备夯实JS基础,诚然,很多人觉得JS就算不了解那些高级特性,样可以完成大量丰富有趣的工作,但是在我看来,业务代码的学习不过是为了吃饭,而语言的学习才是根本,当然更好的学习语言才能更好...

eswang的CSDN博客 380

《你不知道的JavaScript》-- 精读(五)

知识点 1.实质问题 当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。 function foo(){ var a = 2; function bar(){ console.log(a); // 2 } bar() } foo() 复制代码根据前面的定义,严格来说上述代码并不是闭包,最准确地用来解释bar()...

weixin_34050005的博客 248

精读《手写 JSON Parser》

要解析 JSON 首先要理解语法概念,之前的精读《手写 SQL 编译器 - 语法分析》系列也有介绍过,不过本文介绍的更形象,看下面这个语法图:这是关于 Object 类型的语法描述图,从左向右看,根据箭头指向只要能走出这个迷宫就属于正确语法。比如第行→whitespace→表示{ }属于合法的 JSON 语法。→whitespace→string→whitespace→→value→表示属于合法的 JSON 语法。你可能会问,双引号去哪儿了?

qzmlyshao的博客 1225

js小黄书笔记:闭包和作用域

???? :本书所有知识点均可在《你不知道的JavaScript(上)》中找到出入点,如果想要进阶原生js的同学,推荐你去把《你不知道的JavaScript》上中两册精读遍,我相信你能收获很多东西的 ???? 以下的内容是我结合上中两册总结出来的笔记,文笔有限,随缘更新 ,闭包和作用域 0. 作用域 什么是作用域:用来存储变量,存储变量的值,变量的增删改查对接的地方【也就是变量能访问到的范围较作用域】 栈内存和堆内存 函数执行形成栈内存,所有的变量都是在栈内存中存储的,也就是所谓的作用域【基本数

weixin_44038881的博客 604

PCL基础:getTransformation函数全流程解析应用实例,篇文章精通点云变换

在 Eigen 和 PCL 中,getTransformation是个常用的函数,用于根据输入的平移和旋转信息(如欧拉角或四元数)生成个仿射变换矩阵(Eigen::Affine3f或 Eigen::Affine3d)。1)在 Eigen 中,可以通过四元数和平移向量构造个变换矩阵。2)讲解了从四元数转换到欧拉角,或者从欧拉角转换到四元数的方法。

weixin_42896234的博客 1335

I2C接口18路LED呼吸灯驱动IS31FL3218互相替代SN3218替换HTR3218

SN3218 I2C接口LED呼吸灯控制电路中文规格书,可实现单色控制18个LED灯,双色控制9个LED灯,3色全彩LED灯可控制6个。包括32 级和64级的LED亮度伽玛补偿数据,在LED呼吸灯亮度控制有较大阶跃或亮度变化不明显时,可参考。由于人视觉对亮度的误差,电流线性增加时,视觉上会感觉到呼吸开始时亮度变化快,然后很快进入亮度饱和的问题。为了解决这个问题,在呼吸时,应该采用伽玛补偿的方法,达到视觉效果的线性。为了显示更细腻的效果,可采取更多的输出级数,防止呼吸时产生可观察到的亮度的跳变。推荐的经验值是,从最暗到最亮的个呼吸周期 T 内,当 T=1s,推荐采用有伽玛补偿的 32 个亮度等级;当 T=2s,推荐采用有伽玛补偿的 64 个亮度等级,以此类推。上述推荐值是 LED 没有任何遮挡的条件下,测试得到的经验值。如果采用挡光板等遮挡 LED,使 LED 发光更加柔和,可以采用更少的亮度等级实现。具体的等级数,需要根据实际的挡光材料具体测试。

上一篇: 精读Javascript系列序---导读
下一篇: 精读Javascript系列(二)环境记录与词法环境
krfwill
博客等级 码龄11年 38粉丝 16原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值