摘要:作用域引擎的另一位朋友,负责收集并维护所有生命的标识符组成的一系列查询,并实施一套非常严格的查询,确定当前执行的代码对这些标识符的访问权限。三分工合作编译器遇到,编译器会询问作用域是否有一个该名称的变量存在同一个作用域。
今天就简单记录下 var a = 2的时候发生了什么呢?
一、人物关系1、引擎
从头到尾负责整个JavaScript程序的编译及执行过程。
2、编译器
引擎的好朋友,负责语法分析及代码生成等脏活累活。
二、对话3、作用域
引擎的另一位朋友,负责收集并维护所有生命的标识符组成的一系列查询,并实施一套非常严格的查询,确定当前执行的代码对这些标识符的访问权限。
当我们看到var a = 2;的时候,就会觉得这是一个声明而已。
但我们的朋友们却不这么认为,引擎认为这里有两个声明,一个是编译器编译的时候处理的,一个是引擎运行处理的。
三、分工合作1、编译器遇到 var a,编译器会询问作用域是否有一个该名称的变量存在同一个作用域。如果是,编译器就会忽略该声明,继续进行编译;否则它会要求作用域在当前域声明一个新的变量,并命名为a;
2、接下来编译器会为引擎生成运行时所需要的代码,这些代码被用来处理 a = 2这个赋值操作。引擎运行时首先会询问作用域,当前作用域是否存在 a变量,如果是,引擎就会使用这个变量。如果否,引擎就会继续查找该变量(通过作用域链)。
如果最终引擎找到了变量,就会将2赋值给他。否则引擎就会抛出一个异常,你这个找不到的啦!
本文是《你不知道的JavaScript》的学习笔记,文中举例非本人原创。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84774.html
摘要:一前言这个周末,注意力都在学习基础知识上面,刚好看到了闭包这个神圣的东西,所以打算把这两天学到的总结下来,算是巩固自己所学。因此要注意闭包的使用,否则会导致性能问题。五总结闭包的作用能够读取其他函数内部变量。 # 一、前言 这个周末,注意力都在学习基础Js知识上面,刚好看到了闭包这个神圣的东西,所以打算把这两天学到的总结下来,算是巩固自己所学。也可能有些不正确的地方,也请大家看到了,麻...
摘要:函数的作用域也可被分为全局作用域和局部作用域函数作用域被定义在指定函数内部的函数被称为局部函数或内部函数。局部变量在函数内部声明的变量被成为局部变量,它只能在函数的内部进行访问。 作用域 概述 变量和函数都具有作用域 作用域就是变量和函数的可被访问的范围 控制着变量和函数的可见性和生命周期。变量的作用域可被分为全局作用域和局部作用域(函数作用域) 如果变量是被定义在全局作用域的话 在J...
摘要:考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。函数声明语句函数表达式循环循环还有一个特别之处,就是循环语句部分是一个父作用域,而循环体内部是一个单独的子作用域。声明一个只读的常量。 es6学习笔记-let,const和块级作用域_v1.0 块级作用域 javascript 原来是没有块级作用域的,只有全局作用域和函数作用域 例子1 因为没有块级作用域,所以每次的i都是一...
摘要:一新增了命令和一样都是用来声明标量,但所声明的变量只在声明的代码块内及声明之后有效命令适合在循环中使用在循环内有效在全局内有效命令暂时性死区大括号中的使用了声明,所以在大括号中暂时只能在声明之后有效不允许在同一作用域内重复声明变量,因此不能 一、ES6新增了let命令 let 和 var 一样都是用来声明标量,但let所声明的变量只在【声明的代码块内】及【声明之后】有效 { c...
摘要:什么是闭包定义我所理解的闭包就是,即使外部函数已经运行完毕,内部函数仍能访问外部函数的作用域中的变量。闭包的应用场景私有变量模块需求只能通过函数提供的方法访问函数内部的变量隐藏。为什么闭包很重要参考资料征服面试什么是闭包 1. 什么是闭包 MDN定义:Closures are functions that refer to independent (free) variables (v...
阅读 2544·2021-11-18 10:02
阅读 1694·2021-09-30 10:00
阅读 5239·2021-09-22 15:27
阅读 1175·2019-08-30 15:54
阅读 3652·2019-08-29 11:13
阅读 2922·2019-08-29 11:05
阅读 3291·2019-08-29 11:01
阅读 549·2019-08-26 13:52