JavaScript系列
文章平均质量分 80
巨人的小脚丫
这个作者很懒,什么都没留下…
展开
-
说说JavaScript中的事件模型
javascript中的事件,可以理解就是在HTML文档或者浏览器中发生的一种交互操作,使得网页具备互动性, 常见的有加载事件、鼠标事件、自定义事件等由于DOM是一个树结构,如果在父子节点绑定事件时候,当触发子节点的时候,就存在一个顺序问题,这就涉及到了事件流的概念事件冒泡是一种从下往上的传播方式,由最具体的元素(触发节点)然后逐渐向上传播到最不具体的那个节点,也就是DOM中最高层的父节点原创 2022-10-28 08:00:00 · 253 阅读 · 1 评论 -
JavaScript中执行上下文和执行栈是什么?
引擎会执行位于执行栈栈顶的执行上下文(一般是函数执行上下文),当该函数执行结束后,对应的执行上下文就会被弹出,然后控制流程到达执行栈的下一个执行上下文。可以有任意多个函数上下文,每次调用函数创建一个新的上下文,会创建一个私有作用域,函数内部声明的任何变量都不能在当前函数作用域外部直接访问。执行栈,也叫调用栈,具有 LIFO(后进先出)结构,用于存储在代码执行期间创建的所有执行上下文。每当引擎碰到一个函数的时候,它就会创建一个函数执行上下文,然后将这个执行上下文压到执行栈中。简单的来说,执行上下文是一种对。原创 2022-10-27 08:00:00 · 236 阅读 · 0 评论 -
谈谈this对象的理解
函数的this关键字在JavaScript中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别在绝大多数情况下,函数的调用方式决定了this的值(运行时绑定)this关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象// 当前调用栈是:baz // 因此,当前调用位置是全局作用域 console . log("baz");bar();//原创 2022-10-24 07:37:03 · 816 阅读 · 0 评论 -
Javascript如何实现继承?
下面以一张图作为总结:通过来划分不同的继承方式,最后的寄生式组合继承方式是通过组合继承改造之后的最优继承方式,而extends的语法糖和寄生组合继承的方式基本类似。原创 2022-10-25 08:00:00 · 160 阅读 · 0 评论 -
JavaScript原型,原型链 ? 有什么特点?
_proto__作为不同对象之间的桥梁,用来指向创建它的构造函数的原型对象的每个对象的__proto__都是指向它的构造函数的原型对象prototype的构造函是一个函数对象,是通过Function构造器产生的原型对象本身是一个普通对象,而普通对象的构造函数都是Object刚刚上面说了,所有的构造器都是函数对象,函数对象都是Function构造产生的Object的原型对象也有__proto__属性指向null,null是原型链的顶端一切对象都是继承自Object对象,Object对象直接继承根源对象。原创 2022-10-24 07:32:13 · 872 阅读 · 0 评论 -
(每日一题)面试官:说说你对作用域链的理解
引擎会尝试在当前作用域下去寻找该变量,如果没找到,再到它的上层作用域寻找,以此类推直到找到该变量或是已经到了全局作用域。可见上述代码中在函数内部声明的变量或函数,在函数外部是无法访问的,这说明在函数内部定义的变量或者方法只是函数作用域。任何不在函数中或是大括号中声明的变量,都是在全局作用域下,全局作用域下声明的变量可以在程序的任意位置访问。把作用域比喻成一个建筑,这份建筑代表程序中的嵌套作用域链,第一层代表当前的执行作用域,顶层代表全局作用域。时找不到,向上一层作用域找,即全局作用域,还是找不到则报错。原创 2022-10-21 08:00:00 · 127 阅读 · 0 评论 -
(每日一题)面试官:说说你对闭包的理解?闭包使用场景
一般函数的词法环境在函数返回后就被销毁,但是闭包会保存对创建时所在词法环境的引用,即便创建时所在的执行上下文被销毁,但创建时所在词法环境依然存在,以达到延长变量的生命周期的目的。是维护它们各自的独立性的,每次调用其中一个计数器时,通过改变这个变量的值,会改变这个闭包的词法环境,不会影响另一个闭包中的变量。中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁。例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。没有自己的局部变量。原创 2022-10-20 08:00:00 · 189 阅读 · 0 评论 -
(每日一题)面试官:深拷贝浅拷贝的区别?如何实现一个深拷贝?
深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。浅拷贝只复制属性指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存,修改对象属性会影响原对象。引用类型数据保存在堆内存中,引用数据类型的变量是一个指向堆内存中实际对象的引用,存在栈中。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。从上图发现,浅拷贝和深拷贝都创建出一个新的对象,但在复制对象属性的时候,行为就不一样。下面简单实现一个浅拷贝。原创 2022-10-19 08:00:00 · 117 阅读 · 0 评论 -
(每日一题)面试官:== 和 ===区别,分别在什么情况使用
全等操作符由 3 个等于号( === )表示,只有两个操作数在不转换的前提下相等才返回。如果一个操作数是字符串,另一个操作数是数值,则尝试将字符串转换为数值,再比较是否相等。等于操作符(==)在比较中会先进行类型转换,再确定操作数是否相等。的情况下,我们可以使用相等操作符(),其他情况建议一律使用全等操作符(===)相等操作符(==)会做类型转换,再进行值的比较,全等运算符不会做类型转换。等于操作符用两个等于号( == )表示,如果操作数相等,则会返回。比较,相等操作符(==)为。前面文章,我们提到在。原创 2022-10-18 08:00:00 · 103 阅读 · 0 评论 -
(每日一题)面试官:谈谈 JavaScript 中的类型转换机制
前面我们讲到,JSundefined、null、boolean、string、number、symbolobject但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型let x = y?1 : a;上面代码中,x的值在编译阶段是无法获取的,只有等到程序运行时才能知道虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的,如果运算子的类型与预期不符合,就会触发类型转换机制强制转换(显示转换)自动转换(隐式转换)原创 2022-10-17 08:19:58 · 155 阅读 · 0 评论 -
(每日一题)面试官:JavaScript字符串的常用方法有哪些?
我们也可将字符串常用的操作方法归纳为增、删、改、查,需要知道字符串的特点是一旦创建了,就不可变。这里的删的意思并不是说删除原字符串的内容,而是创建字符串的一个副本,再进行操作。这三个方法都返回调用它们的字符串的一个子字符串,而且都接收一或两个参数。从字符串开头去搜索传入的字符串,并返回位置(如果没找到,则返回 -1 )这里增的意思并不是说直接增添内容,而是创建字符串的一个副本,再进行操作。这里改的意思也不是改变原字符串,而是创建字符串的一个副本,再进行操作。把字符串按照指定的分割符,拆分成数组中的每一项。原创 2022-10-14 16:24:29 · 115 阅读 · 0 评论 -
数组的常用方法有哪些?
传入三个参数,分别是开始位置,要删除元素的数量,要插入的任意多个元素,返回删除元素的数组,对原数组产生影响。首先会创建一个当前数组的副本,然后再把它的参数添加到副本末尾,最后返回这个新构建的数组,不会影响原始数组。传入两个参数,分别是开始位置,删除元素的数量,返回包含删除元素的数组。方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度。对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。原创 2022-10-13 09:54:33 · 107 阅读 · 0 评论 -
(每日一题)面试官:说说JavaScript中的数据类型?存储上的差别?
在JavaScript基本类型复杂类型两种类型的区别是:存储位置不同。原创 2022-10-12 22:27:08 · 164 阅读 · 0 评论