首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js的高级知识---词法分析

词法分析 词法分析方法: js运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数说明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active...已经重新被赋值27,所以这个时候会打印: 27 function age() 并没有调用所以并不会执行 到第三个console.log(age)这个时候age的值并没有被再次修改,所以这个时候会打印: 27 运行js...已经重新被赋值23,所以这个时候会打印: 23 function age() 并没有调用所以并不会执行 到第三个console.log(age)这个时候age的值并没有被再次修改,所以这个时候会打印: 23 运行js...所以第二个console.log(age)会打印: 23 function age() 是一个函数表达式,所以不会做任何操作 age() 这个时候的age还是23,并不是函数表达式,所以这里会报错 运行js...console.log(age)这里的age没有被修改还是function age(){console.log(age)},所以会打印: function age(){console.log(age)} 运行js

1.6K100

重学JS基础-词法和语法

1.JS词法定义 JavaScript 源代码中的输入可以这样分类: WhiteSpace 空白字符 LineTerminator 换行符 Comment 注释 Token 词 IdentifierName...的语法定义 语法规则:分号自动补全 JS有一个no LineTerminator here 规则 :表示所在结构的此处不能插入换行符,假如此处插入了换行符,那么系统在编译的时候会自动补上分号 带换行的注释会被认为是换行符...3.JS语句的分类 普通语句:声明语句,表达式语句,空语句,debugger语句等 控制型语句:if,try,while等 带标签的语句:在JS语句前加上标签(比如: "inner:" ),用于跳转 语句块...:用大括号括起来的一组语句 JS语句执行机制 Completion Record( 用于描述异常、跳出等语句执行过程)。...这个结构就保证了非 normal 的完成类型可以穿透复杂的语句嵌套结构,产生控制效果。 最简单的例子就是函数中的语句执行道return之后就不会再往后继续执行。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS学习系列 02 - 词法作用域

    作用域有两种主要工作模型:词法作用域和动态作用域。 大多数语言采用的都是词法作用域,少数语言采用动态作用域(例如 Bash 脚本),这里我们主要讨论词法作用域。 2....词法 大部分标准语言编译器的第一个工作阶段叫作词法化。 简单地说,词法作用域是由你在写代码时将变量和函数(块)作用域写在哪里来决定的。当然,也会有一些方法来动态修改作用域,后边我会介绍。...总结来说,无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定。 3. 欺骗词法 JavaScript 中有 3 种方式可以用来“欺骗词法”,动态改变作用域。...之后的代码时,引擎并不知道或在意前面的代码是以动态形式插入进来并对词法作用域环境进行修改的,引擎只会像往常一样正常进行词法作用域的查找。...with 可以将一个没有或有多个属性的对象处理为一个完全隔离的词法作用域,因此这个对象的属性也会被处理为定义在这个作用域中的词法标识符。

    1.1K30

    JS词法环境和执行上下文

    如果要成为一名优秀的JS开发者,那么对JavaScript程序的内部执行原理要有所了解。本文以最新的ECMA规范中的第八章节为基础,理清JavaScript的词法环境和执行上下文的相关内容。...而执行栈(Execution Context Stack)是用来管理执行期间创建的所有执行上下文的数据结构,它是一个LIFO(后进先出)的栈,它也是我们熟知的JS程序运行过程中的调用栈。...将全局执行上下文压入执行栈,通常JS引擎都有一个指针running指向栈顶元素:图片JS引擎会将全局范围内声明的函数(foo)初始化在全局上下文中,之后开始一行行的执行代码,运行到console就在running...词法环境(LexicalEnvironment)词法环境是ECMA中的一个规范类型 —— 基于代码词法嵌套结构用来记录标识符和具体变量或函数的关联。简单来说,词法环境就是建立了标识符——变量的映射表。...当你熟悉了执行上下文和词法环境,相信去理解认识更多JS特性和概念时,会更加轻松容易。

    1.3K30

    词法作用域

    词法阶段 ---- 大部分标准语言编译器的第一个工作阶段叫做词法化。词法化的过程会对源代码中的字符进行检查,如果是有状态的解析过程,还会赋予单词语义。 词法作用域就是定义在词法阶段的作用域。...无论函数在哪里被调用,他的词法作用域只由函数被声明时所处的位置决定。 词法作用域查找只会查找一级标识符。...欺骗词法(修改词法作用域) ---- 欺骗词法作用域会导致性能下降。...eval()函数如果接受了含有一个或多个声明的代码,就会修改其所处的词法作用域,而with声明实际上是根据你传递给它的对象凭空创建一个全新的词法作用域。...性能 ---- JS引擎会在编译阶段进行数项的性能优化。其中有些依赖于能够根据代码的词法进行静态分析,并预先确定所有变量和函数的定义位置,才能在执行过程中快速找到标识符。

    56820

    词法作用域

    词法作用域 作用域共有两种主要的工作模式,第一种最为普遍,被大多数编语言所采用的词法作用域,另一种叫做动态作用域,仍有一些编程语言在使用(Bash脚本、Perl中的一些模式等) 大多数标准语言编译器的第一个工作阶段叫作词法化...词法作用域就是定义在词法阶段的作用域,由 变量和作用域的位置 来决定的,因此当词法分析器处理代码时会保持作用域不变(大部分情况是这样) // 三层嵌套的作用域 // 作用域气泡由其对应的作用域代码块写在哪里决定的...{ var b = a * 2; function bar(c) { console.log(a, b, c); } bar(b * 3) } foo(2) 查找 作用域气泡的结构和互相之间的位置关系给引擎提供了足够的位置信息...无论函数在哪里被调用,且无论它如何被调用,它的词法作用域都只有函数被声明所处的位置决定。 注:词法作用域只会查找一级标识符,比如a 。...欺骗词法 如果说词法作用域完全由写代码期间函数所声明的位置来定义,怎样才能在运行时来“修改”词法作用域?

    53710

    JS词法环境和执行上下文_2023-02-24

    如果要成为一名优秀的JS开发者,那么对JavaScript程序的内部执行原理要有所了解。 本文以最新的ECMA规范中的第八章节为基础,理清JavaScript的词法环境和执行上下文的相关内容。...而执行栈(Execution Context Stack)是用来管理执行期间创建的所有执行上下文的数据结构,它是一个LIFO(后进先出)的栈,它也是我们熟知的JS程序运行过程中的调用栈。...将全局执行上下文压入执行栈,通常JS引擎都有一个指针running指向栈顶元素: 图片 JS引擎会将全局范围内声明的函数(foo)初始化在全局上下文中,之后开始一行行的执行代码,运行到console就在...词法环境(LexicalEnvironment) 词法环境是ECMA中的一个规范类型 —— 基于代码词法嵌套结构用来记录标识符和具体变量或函数的关联。...当你熟悉了执行上下文和词法环境,相信去理解认识更多JS特性和概念时,会更加轻松容易。

    44630

    JS数据结构

    作者:同梦奇缘 链接:https://segmentfault.com/a/1190000017905515 一、认识数据结构 什么是数据结构?...下面是维基百科的解释: 数据结构是计算机存储、组织数据的方式。...数据结构意味着接口或封装:一个数据结构可被视为两个函数之间的接口,或者是由数据类型联合组成的存储内容的访问方法封装 我们每天的编码中都会用到数据结构,数组是最简单的内存数据结构,下面是常见的数据结构:...数据结构并没有之前想象中那么神秘,它们只是规定了这类数据结构的操作方式:栈只能对栈顶进行操作,队列只能在尾部添加在头部弹出;且它们不关心内部的元素状态。...个人认为,学习数据结构是为了提高我们通过代码建模的能力,这也是任何一门编程语言都通用的知识体系,优秀编码者必学之。

    93220

    浅谈JavaScript词法分析步骤

    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 分析参数 再分析变量的声明 分析函数声明 具体步骤如下: 函数在运行的瞬间,生成一个活动对象(Active Object...console.log(age); 5 function age() { 6 } 7 console.log(age); 8 9 } 10 func(18); 词法分析...  第5行代码有函数age,则将function age(){}付给AO.age,即AO.age = function age() {} 所以,执行代码时:   第2行代码运行时拿到的age是词法分析后的...词法分析时应该注意var age = function age(){},这个语句,参与了第二步和第三步; 执行代码时应注意函数表达式不做任何操作,且只声明变量没赋值时,age仍然等于AO.age。

    61350
    领券