深入理解原生JavaScript
文章平均质量分 57
对ES6中基本思想的深入剖析,包含一些大厂的笔试题,如原型、原型链、作用域、作用域链等
htguyftg
前端小菜鸡
展开
-
this指向全解析
this实质上是函数内部的执行期的上下文指向this只有在执行期才能明确指向,换言之,函数的执行条件的环境决定了this的指向。原创 2023-06-18 22:32:19 · 135 阅读 · 0 评论 -
call()和apply()
这两个方法都会以指定的 this 值来调用函数,即会设置调用函数时函数体内 this 对象的值。apply()方法接收两个参数:函数内 this 的值和一个参数数组。第二个参数可以是 Array 的实例,但也可以是 arguments 对象。call()方法与 apply()的作用一样,只是传参的形式不同。第一个参数跟 apply()一样,也是 this值,而剩下的要传给被调用函数的参数则是逐个传递的。换句话说,通过 call()向函数传参时,必须将参数一个一个地列出来。相同之处:都用来实现代码重用原创 2021-11-14 21:42:11 · 252 阅读 · 0 评论 -
原型、原型链、constructor
/*对应名称prototype 原型__proto__ 原型链(原型的链接点,当作一个指针、结点)从属关系prototype -> 函数的一个属性:对象 {}__proto__ -> 对象的Object的一个属性:对象 {}对象的__proto__保存着该对象的构造函数的prototype*/function Test() { this.a = 1;}const test = new Test(); // 沿着原型链从底层向高层逐渐继承Test.prot原创 2021-11-14 21:40:41 · 662 阅读 · 0 评论 -
闭包(基础)
让我们先来看一个简单的例子function test1() { function test2() { var b = 2; console.log(a); } var a = 1; return test2();}var c = 3;var test3 = test1();test3();尽管此时test1已经销毁(销毁理应a为undefined)test1执行结束之后应该销毁掉scope chain和对应的AO,但此时te原创 2021-11-14 21:38:36 · 375 阅读 · 0 评论 -
作用域、作用域链——预编译(2)
这里写目录标题[[scope]]JS都做了什么?1.函数定义时生成GO2.预编译(被执行前)时生成AO3.外层函数被执行的时候,内层函数被定义4.b函数只有在执行时才会生成自己的AO要点总结:练习AO是和function紧密联系在一起的,函数可以被认为是一个独立的仓库。函数其实也是一种对象类型、引用类型,具有引用值,如function.name function.prototype function.length。但是函数的有些属性是我们无法访问的,类似私有属性,是JS引擎内固有的隐式属性[[scope原创 2021-11-14 21:33:07 · 474 阅读 · 0 评论 -
AO对象与GO对象——预编译(1)
文章目录AO对象与GO对象——预编译(1)JS引擎都做了什么?函数声明提升var关键字的声明提升,赋值不提升一个奇奇怪怪的例子暗示全局变量AO对象GO对象AO和GO综合练习AO对象与GO对象——预编译(1)JS引擎都做了什么?1.检查通篇的语法错误(语法分析)1.5预编译的过程(预编译)2.解释一行执行一行(解释执行)函数声明提升text();function text() { console.log(1); } // 1var关键字的声明提升,赋值不提升var关键字声明的变量会自动提原创 2021-11-14 21:23:01 · 1102 阅读 · 0 评论