web前端-JS
香香blog
温故而知新可以为师矣
展开
-
JS中的同步异步编程-微任务-宏任务
浏览器是多线程的1. GUI渲染线程2. HTTP网络请求线程(并发数6~7)3. 事件监听\定时器监听…JS代码的运行是单线程的:浏览器只分配一个GUI渲染线程去执行我们的JS代码1. 对于大部分JS代码来讲上面代码没有执行完,下面代码是不能执行的 “同步编程”2. 但是对于某些JS代码来讲(事件绑定、定时器、Promise/async/await、Ajax等),我们需要在上面代码没有处理的情况下,GUI渲染线程能够继续向下执行 “异步编程”console.time('AAA');//..原创 2020-06-07 12:49:16 · 193 阅读 · 0 评论 -
JS中的多种继承方式
JS本身是基于面向对象开发的编程语言=》类:封装、继承、多态1、封装:类也是一个函数,把实现一个功能的代码进行封装,以实现低耦合高内聚2、多态:重载、重写重写:子类重写父类上的方法(伴随着继承运行的)重载:相同的方法由于参数和返回值的不同,具备了不同的功能(JS不具备严格意义上的重载)JS中的重载,同一方法根据传参的不同实现不同的功能;3、继承:子类继承父类中的方法在JS语言中,它的继承和其他编程语言还是不太一样的JS中的多种继承方式1)JS中的第一种继承方案:原型继承(让子类的原型=原创 2020-05-23 14:41:35 · 172 阅读 · 0 评论 -
一个题目带你理解函数的三种角色
函数的三种角色1、普通函数2、构造函数(类)3、对象首先我们来看看这三种角色分别做了哪些操作:普通函数函数的执行 Fn()形成私有的上下文 <EC(Fn)>、初始化作用域链、初始化this[window]、初始化arguments、形参赋值、变量提升、代码执行…构造函数构造函数的执行 new Fn()形成私有的上下文 <EC(Fn)>、初始化作用域链、和普通函数的区别:创建一个对象(这个对象是当前类的实列)this(指向创建的对象)原创 2020-05-21 19:31:37 · 171 阅读 · 0 评论 -
call的实现原理
Function.prototype:call/apply/bind 是Function原型上的方法,这三个方法都是用来改变函数中的THIS的call:[function].call([context],params1,params2,…)(1)[function]作为Function内置类的一个实例,可以基于__proto__找到Function.prototype的call方法,并且把找到的call方法执行;(2) 在call方法执行的时候,会把[function]执行,并且把函数中的THIS原创 2020-05-20 15:54:38 · 2689 阅读 · 0 评论 -
JS中this的理解
我们在编写代码的过程中经常会遇到this的指向问题,下面对this的指向做一个总结一、THIS:1)全局上下文中的this是window;2)块级上下文中(如:判断体“{}”,循环体“{}”)中没有自己的this,它的this是继承所在上下文中的this的;3)在函数的私有上下文中,this的情况会多种多样,也是接下来我们重点研究的;二、函数中的THIS:THIS不是执行上下文(EC才是执行上下文),THIS是执行主体如何理解主体呢?如:张三拿着加了五个鸡蛋的煎饼果子去北京大饭店吃早原创 2020-05-20 12:04:28 · 275 阅读 · 0 评论 -
var-let-const三者的区别
ES3创建变量用的是 varES6创建变量用的是 let / const那么var/let/const三者的区别?// let VS const =>突出的是指针指向以及等号赋值的底层机制// =赋值其实就是指针指向的过程,先创建值,再创建变量(引申:堆栈内存上以及AO/VO上 [点到为止]),最后指针关联;LET创建的变量,是因为可以修改当前变量的指针指向,而CONST创建的变量,指针指向一但确定,则不能再更改(引申:平时也看一些好的文章,有的文章中介绍CONST创建的是常量,我.原创 2020-05-10 23:13:39 · 160 阅读 · 0 评论 -
闭包的理解和应用-面试必问题-提高逼格的回答
谈谈你对闭包的理解,以及在项目中的应用!阐述闭包是什么?(引申:堆栈、EC、AO、VO、SCOPE…)闭包的作用及在真实项目中的应用场景,以及所带来的问题!由闭包引发的高阶编程技巧突出自己在分析研究框架的源码(逼格更高的是自己写类库、插件的时候)是怎么应用这些东西的!回答如下:// 建议:浏览器加载页面会把代码放到栈内存中执行(也就是ECStack),函数进栈执行会产生一个私有的上下文(也就是EC),此上下文能保护里面的私有变量(也就是AO)不受外界的干扰,并且如果当前上下文中的某些内.原创 2020-05-10 22:47:29 · 301 阅读 · 0 评论 -
闭包作用域面试题分析
let arr = [10.18, 0, 10, 25, 23];arr = arr.map(parseInt);console.log(arr);//[10,NaN,2,2,11]分析: parseInt首先把第一项转换为字符串,然后看做X(2~36)进制,最后转换为十进制parseInt(10.18,0)=>把’10’看做10进制转换为10进制 =>10par...原创 2020-04-30 10:13:55 · 221 阅读 · 0 评论 -
闭包和作用域
GO 全局对象window 堆内存 浏览器内置的APIVO(G) 全局变量对象 上下文中的空间 全局上下文中创建的变量基于VAR/FUNCTION在全局上下文中声明的全局变量也会给GO赋值一份(映射机制)但是就LET/CONST等ES6方式在全局上下文中创建的全局变量和GO没有关系var/function存在变量提升 但是let/const不会浏览器的垃圾回收机...原创 2020-04-28 20:16:51 · 253 阅读 · 0 评论 -
arr.map(){}-数组迭代-N进制运算
/*数组的迭代方法(遍历数组中的每一项做一些特殊的处理)forEach 遍历数组每一项(数组中有多少项,就会触发执行多少次回调函数,每一次把迭代的当前项和当前项的索引传递给回调函数)map 和forEach类似,只不过支持返回值,回调函数中的返回值会把当前迭代的这一项替换掉find 迭代数据每一项的时候,只要有一项在回调函数中返回TRUE则找到内容,后面不会在迭代了,返回的是找到的这一项...原创 2020-04-27 10:36:28 · 193 阅读 · 0 评论 -
浏览器如何实现变量提升var和function
变量提升变量提升:在当前上下文中(全局/私有/块级),JS代码自上而下执行之前,浏览器会提前处理一些事情(可以理解为词法解析的一个环节,词法解析一定发生在代码执行之前),会把当前上下文中所有带VAR/FUNCTION关键字的进行提前的声明或者定义带var的只会提前的声明、带function会提前的声明定义使用变量提升的作用:没有给变量定义值就使用不会报错,不影响js执行。var a=1...原创 2020-04-27 14:22:18 · 579 阅读 · 0 评论