![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Javascript
DY木子羊
小白
展开
-
作用域链
我们都知道,js的执行顺序总是与代码的先后顺序有所差异,抛开异步的问题,我们会发现就算是同步,代码的执行结果也总和我们的预期不相符合,这是js预编译的效果。提到预编译就不得不提作用域链。作用域链:[[scope]]中以链式连接的形式存储着执行期上下文,是一个隐式属性。多次调用同一个函数会创建多个执行器上下文,每次执行完都会被销毁。举个栗子:function a() { function b() { function c() {} }}上面这个简单的栗子,[[scope]]的变化过程大概是原创 2021-04-16 10:11:56 · 80 阅读 · 0 评论 -
预编译
JS三部曲1.语法分析(扫描)2.预编译3.解释执行预编译不仅仅会发生在代码块执行之前(全局的预编译),它更多的是会发生在函数执行之前。全局的预编译1.首先创建一个Go对象(Global Object)2.浏览寻找全局变量将其作为Go的属性名并赋值undefined3.寻找函数名并赋值函数体举个简单的例子var a = 123;function a() {}console.log(a);a.全局预编译的过程,首先应该先创建一个Go对象Go{ }b.寻找全局变量名赋值und原创 2021-04-15 22:34:19 · 145 阅读 · 0 评论 -
ECMA6学习小结
ECMA6变量声明 letlet 用let声明的变量,遇到大括号就会形成作用域,也叫做块级作用域。 用let声明的变量不能重复声明 不存在变量提升 不影响作用域链常量声明 constconst 一定要有初始值 一般常量使用大写(规范) 块级作用域 常量值不能修改 对数组和对象的元素修改,不算做对常量的修改,不会报错 eg:const A=[1,2,3,4]; A.push(5);解构 ES6 允许原创 2020-09-07 22:26:20 · 106 阅读 · 0 评论