精读Javascript系列(二)环境记录与词法环境

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

开通 VIP

前言

关于变量,在Javascript核心知识体系中,占比不重,即使有些迷惑行为,也认为Javascript本应就如此,就因为下意识的草率,导致这些小问题成了日后进阶的壁障。

这里就先从两个极为经典的问题开始吧。

变量提升和暂存死区

先来两个示例:

其一:变量提升
  console.log(typeof number);  // undefined
  var number = 1000;
  console.log(number);  // 1000

应用中,var声明的变量能够提前使用虽然只是undefined, 我们把这种现象称之为变量提升。事实上,var声明的变量奇怪之处并不只是如此,例如window.number,它返回的是1000

它声明的变量被绑定到了window全局对象上,甚至在Javascript代码中,可以允许重复声明。这又是为什么?

但是,如果我们这样使用:

  console.log(typeof isNaN); // function
  var isNaN = 1000;
  var isNaN;
  console.log(isNaN);     // 1000
  

不知有没有发现, isNaN不仅提升了,甚至有一个值当然这是来自window

总体而言, 如果说这么多的迷惑行为都是Javascript本质特征,说实话很难让人信服。

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

相关推荐

jQuery不是过时工具,而是前端演进的底层解剖课

jQuery本质上是JavaScript在浏览器兼容性碎片化时代的抽象实践,它揭示了DOM操作、事件模型异步通信等核心前端概念的原始形态。其选择器引擎Sizzle、事件委托机制$.ajax封装,实为对原生API缺陷的系统性补全,体现了抽象层设计中性能开发效率的经典权衡。理解jQuery,就是理解现代框架中polyfill、shim适配器模式的起源;掌握其源码逻辑,能显著提升对Vue/React中事件绑定、动态DOM更新及请求管理的底层认知。本文以‘剧场版’结构还原jQuery三阶段演进,聚焦Sizz

世范水晶 1835

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

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

一袋米要扛几楼_ 4204

信息提纯四步法:NLP搜索技术在海量信息中的实践应用

在信息爆炸的时代,如何从海量、碎片化且真假难辨的内容中快速提取有价值的技术信息,是开发者技术从业者面临的核心挑战。这涉及到自然语言处理(NLP)信息检索等基础技术领域。NLP通过实体识别、情感分析关键词提取等能力,帮助机器理解文本语义,而高级搜索语法多平台交叉检索则是高效获取一手信源的关键。这些技术的工程价值在于构建一套可复用的“信息提纯”工作流,将原始、嘈杂的输入转化为结构化、可验证的信号。在实际应用场景中,无论是评估开源项目、分析技术争议,还是进行市场调研,这套方法都能显著提升信息处理效率决策

weixin_33842304的博客 406

JavaScript运行机制

词法环境 每个执行上下文都有一个相关联的词法环境(简称环境)。 词法环境的定义:用于定义出现在上下文中的标识符其值之间的关联的结构。从技术上讲,环境是由环境记录(Enviroment Record)(一个将标识符映射到值的实际存储表)以及对其外层环境的引用(可能为 null)组成的。 简而言之:环境是一种存储标识符到变量映射的结构。(这里,标识符指变量或者函数的名称,变量是对实际对象(包括函数对象数组对象)的引用或者基础类型值)。 变量环境 变量环境也是一种词法环境,其环境记录保存该执行上下文内由Var

rwedgsd的博客 259

es6中的词法环境变量环境

【代码】es6中的词法环境变量环境

m0_73280507的博客 404

词法环境&变量环境

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

weixin_62061392的博客 865

JavaScript高级】ES6常见新特性:词法环境、let、const、模板字符串、函数增强、Symbol、Set、Map

ES6常见新特性:词法环境、let、const、模板字符串、函数增强、Symbol、Set、Map

karshey的博客 995

你不知道的JS精读(2)

目录 This的误解 到底什么是This New 箭头函数 This的误解 为啥要用This呢?举个例子: function identify(context) { return context.name.toUpperCase(); } var you = { name: "Reader" }; identify( you ); // READER 这种写法可以说是...

eswang的CSDN博客 400

JavaScript学习路径全解析:从零基础到项目实战的优质资源指南

JavaScript作为现代Web开发的核心语言,其学习路径的选择直接影响学习效率效果。理解编程语言的基本原理,如变量、函数、作用域事件循环,是构建扎实技术根基的关键。掌握这些核心概念后,通过算法练习项目实践能有效提升代码能力工程思维,这对于前端开发、全栈开发等应用场景至关重要。本文聚焦于如何利用freeCodeCamp、MDN等高质量资源,结合LeetCode、CodePen等实践平台,系统化地构建JavaScript知识体系,并自然融入异步编程、原型链等热词概念,为学习者提供一条清晰、高效的学习

weixin_34268843的博客 421

代码大模型落地实战:数据清洗、指令微调推理约束三要素

代码大模型并非通用语言模型的简单迁移,其核心挑战在于如何将LLM能力精准适配到编程语义、语法规范工程实践的交叠地带。原理上,模型在代码任务中的表现不取决于参数规模,而由数据清洗策略、指令微调范式推理时约束机制协同决定;技术价值体现在提升代码补全准确率、降低安全漏洞注入率、增强跨文件上下文理解深度;典型应用场景包括企业级代码助手部署、IDE智能插件开发、CI/CD阶段自动化修复等。本文聚焦‘对抗式数据蒸馏’‘行为级约束’两大关键热词,揭示高质量代码生成的本质是建模‘可修复错误’‘可执行意图’,而非追求

dengkuituo0680的博客 331

Lets-Study 的 10 个隐藏宝藏:这些优质学习资源你一定不能错过

学习资源千千万,真正高质量、成体系、能让人坚持读完的却不多。**Lets-Study** 就是这样一个精选优质学习资源的开源项目——作者像打理私人图书馆一样,把多年积累的编程好文、技术指南成长心得分门别类,整理成一份清晰的学习资源清单。无论你是刚入门的新手,还是工作多年的老手,这份清单里总有你需要的宝藏。今天我们就来挖一挖其中 10 个最值得收藏的隐藏宝藏! > 📌 这个项目结构极其简单,全

gitblog_00953的博客 911

数学建模国赛B题实战:从车辆路径问题建模到Gurobi求解全解析

组合优化是运筹学的核心领域,旨在从有限个可行解中寻找最优方案,其原理在于通过数学建模将现实问题抽象为目标函数约束条件。该技术价值在于能显著提升资源利用效率、降低运营成本,广泛应用于物流配送、生产调度等场景。本文聚焦车辆路径问题这一经典组合优化问题,深入剖析了如何构建混合整数规划模型,并详细介绍了使用Gurobi求解器进行算法实现性能调优的工程实践,为数学建模竞赛实际问题求解提供了从理论到代码的完整范例。

weixin_30681121的博客 342

ES6中的JS执行上下文

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

十九万里的博客 621

彻底掌握变量环境(VE)词法环境(LE)的区别,以及它们如何影响闭包的生成,看这篇文章就够了

概念角色词法环境(LE)管理letconst、构成作用域链、直接参闭包变量环境(VE)管理var函数声明(提升)闭包通过 LE 的outer引用维持外部作用域理解 VE LE 的分离设计,能更深入掌握 JavaScript 的作用域、闭包变量提升机制。闭包的本质是函数对定义时词法环境(LE)的持续引用, VE 无直接关系。

baidu_33383827的博客 928

深入理解JavaScript——词法环境

在说一个概念前,我们需要确定它的前提,此文以 ECMAScript5 为基础撰写最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。

梅花寺 909

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

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

krfwill的博客 1033

词法环境(Lexical Environment)

各位大佬都写得非常好,图示说明+代码说明,非常易于理解。码住。

咸鱼滚滚 930

彻底理解词法环境

ES5调整了执行上下文中的部分概念,去除了AO,VO的概念,添加了词法环境(Lexical Environments)变量环境(Variable Environment)这两个新概念

qq_45730399的博客 1333
上一篇: 精读Javascript系列(一) 变量 、 初识词法环境
下一篇: 精读Javascript系列(三) 执行上下文、 执行栈、初识事件循环
krfwill
博客等级 码龄11年 38粉丝 16原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值