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