番外:透过JS代码看本质
文章平均质量分 80
JS真是让人又爱又狠,但你也许真的离它很远,如何才能更加看清JavaScript呢?
snakeZix
师大一码农
展开
-
番外:透过JS代码看本质 - 05 闭包和this指针
闭包和this指针 参考 延迟解析:V8是如何实现闭包的? 一、闭包 当在一个函数A内定义一个函数B,真正不是完全的不管这个函数B,因为函数B能够访问函数A的变量和对象,这是一旦定义完函数B就确定的事情 (1) 拆解闭包——JavaScript 的三个特性 JavaScript 语言允许在函数内部定义新的函数 可以在内部函数中访问父函数中定义的变量 因为函数是一等公民,所以函数可以作为返回值(不一定要作为返回值,只要能够向外暴露就行) (2) 分析 function foo() { v原创 2021-01-08 16:55:49 · 128 阅读 · 0 评论 -
番外:透过JS代码看本质 - 04 从执行上下文对象入手看声明提前
从执行上下文对象入手看声明提前 资料 js 中的活动对象 与 变量对象 什么区别? 答主:貘吃馍香 的回答 汤姆大叔的博客 涉及到的关键词 执行上下文(执行环境) 活动对象、变量对象 arguments、声明提前 作用域链 一、执行上下文(Execution Contexts) (1) 为什么要有执行上下文 每个函数都有对应的执行环境,它定义了变量或者函数有权访问的数据,决定他们各自的行为 执行上下文(执行环境)是存在的对象,是规范中的存在和引擎上实现,JS无法访问,无法操作,只不过大家都原创 2021-01-08 16:54:45 · 90 阅读 · 0 评论 -
番外:透过JS代码看本质 - 02 预编译、堆栈空间和函数环境
JavaScript预编译和堆栈空间 一、JS代码执行前做了一些事情 预编译前奏:确定函数环境(它是一个抽象的概念) 预编译: 确定当前执行上下文对象(执行环境),声明提前并在内存开辟空间,存储变量和函数 JS是静态作用域检测,代码一旦写好,作用域就确定了 二、栈空间 和 函数环境 栈是一种数据结果,先进后出。大家都知道函数是可以嵌套调用执行的,假设一个函数A调用函数B,当函数B执行完,应该要回到函数代码A继续执行,为了知道函数B执行完成之后应该回到哪个位置,那么在执行函数B之前应该先记录断点(汇编原创 2021-01-08 16:53:05 · 129 阅读 · 0 评论 -
番外:透过JS代码看本质 - 01 准备资料
准备资料 参考 浏览器是如何工作的:Chrome V8让你更懂JavaScript 讲了很多很好,但是有些东西需要补充 V8引擎是如何工作 讲的相对简单,但是容易懂 准备说作用域和执行环境这篇需要了解很多计算机基础知识,不然只会感觉花里胡哨看了个寂寞 如果可以推荐看一些极客时间的《图解Goole V8》质量不错 一、高级语言是如何被编译执行或者解释执行的 极客时间的重学前端和图解Goole V8 (1) 编译原理 编译原理入门篇|一篇文章理解编译全过程 编译目标: 如果源代码在操作系统上原创 2021-01-08 16:45:43 · 136 阅读 · 0 评论 -
番外:透过JS代码看本质 - 03 变量声明和函数声明
声明提前 通常JS引擎会在正式执行之前先进行一次预编译,在这个过程中,首先将变量声明及函数声明提升至当前作用域的顶端,然后进行接下来的处理 首先明确一点:提升不是一个技术名词; JS由V8引擎执行时,的解析执行JS顺序,存在的一种现象,但由于有的代码让人难以理解, 于是,变量提升成了了解JS执行过程的必备知识。 变量的声明(广义) 其实可用分为三部分: 创建 create 初始化 initialize 赋值 assign 先看看var //在之前先了解一个小知识 typeof 判别一个变量的类型原创 2020-07-28 00:08:41 · 179 阅读 · 0 评论
分享