
【前端面试大全】
文章平均质量分 95
HTML、CSS、JavaScript、Node.js、Vue.js、网络等前端相关面试题
琢鸣
记录工作学习中的方法,技巧,bug。
展开
-
JS浮点数精度问题及解决方案
因为浮点数的计算存在round-off问题,也就是浮点数不能够进行精确的计算。并且:不仅JavaScript,所有遵循IEEE 754规范的语言都是如此;在JavaScript中,所有的Number都是以64-bit的双精度浮点数存储的;双精度的浮点数在这64位上划分为3段,而这3段也就确定了一个浮点数的值,64bit的划分是“1-11-52”的模式,具体来说:就是1位最高位(最左边那一位)表示符号位,0表示正,1表示负;11位表示指数部分;52原创 2023-12-04 16:45:51 · 2723 阅读 · 0 评论 -
函数柯里化
柯里化(currying)又称部分求值。一个柯里化的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。原创 2023-12-03 17:08:13 · 324 阅读 · 7 评论 -
JavaScript递归
使用递归时需要注意如下事项:递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以用循环的方式来实现。使用递归时需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当一个函数调用,栈就会加一层,每当函数返回,栈就会减一层。由于栈的大小不是无限的,所以递归调用的次数过多,会导致栈溢出。原创 2023-12-03 16:52:01 · 281 阅读 · 1 评论 -
阻止事件默认行为
如何阻止默认事件?方法一:全支持 event.preventDefault();// 方法二:该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。event.returnValue = false;// 方法三:不建议滥用,jQuery 中可以同时阻止冒泡和默认事件return false;原创 2023-12-03 16:39:01 · 848 阅读 · 0 评论 -
DOM 事件的传播机制
事件委托,又被称之为事件代理。在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面整体的运行性能。导致这一问题的原因是多方面的。首先,每个函数都是对象,都会占用内存。内存中的对象越多,性能就越差。其次,必须事先指定所有事件处理程序而导致的DOM访问次数,会延迟整个页面的交互就绪时间。对事件处理程序过多问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click事件会一直冒泡到document层次。也就原创 2023-12-02 18:07:45 · 214 阅读 · 3 评论 -
DOM 事件的注册和移除
注册事件的方式常见的有3种方式:HTML元素中注册的事件:这种方式又被称之为行内事件监听器。这是在浏览器中处理事件最原始的方法。DOM0级方式注册事件:这种方式是首先取到要为其绑定事件的元素节点对象,然后给这些节点对象的事件处理属性赋值一个函数。原创 2023-12-02 14:16:41 · 297 阅读 · 0 评论 -
垃圾回收与内存泄漏
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来越高,轻则影响系统性能,重则导致进程崩溃。也就是说,不再用到的内存,如果没有及时释放,就叫做内存泄漏(JavaScript。原创 2023-12-02 09:04:29 · 192 阅读 · 0 评论 -
作用域和作用域链
作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。换句话说,作用域决定了代码区块中变量和其他资源的可见性。var inVariable = "内层变量2";outFun2();从上面的例子可以体会到作用域的概念,变量inVariable在全局作用域没有声明,所以在全局作用域下取值会报错。作用域就是一个独立的地盘,让变量不会外泄、暴露出去。也就是说作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。ES6之前JavaScript。原创 2023-12-01 19:17:06 · 981 阅读 · 6 评论 -
执行栈和执行上下文
什么是执行上下文?简而言之,执行上下文是评估和执行JavaScript代码的环境的抽象概念。每当Javascript代码在运行的时候,它都是在执行上下文中运行。原创 2023-12-01 11:20:47 · 147 阅读 · 2 评论 -
原型和原型链
在设计JavaScript时,借鉴了Self和Smalltalk这两门基于原型的语言。之所以选择基于原型的对象系统,是因为一开始就没有打算在JavaScript中加入类的概念,因为JavaScript的设计初衷就是为非专业的开发人员(例如网页设计者)提供一个方便的工具。由于大部分网页设计者都没有任何的编程背景,所以在设计JavaScript时也是尽可能使其简单、易学。这因为如此,JavaScript。原创 2023-11-30 20:26:21 · 283 阅读 · 4 评论 -
JavaScript中数据类型的转换
JavaScript是一种动态类型语言,变量没有类型限制,可以随时赋予任意值。var x = y?1 : 'a';上面代码中,变量x到底是数值还是字符串,取决于另一个变量y的值。y为true时,x是一个数值;y为false时,x是一个字符串。这意味着,x的类型没法在编译阶段就知道,必须等到运行时才能知道。虽然变量的数据类型是不确定的,但是各种运算符对数据类型是有要求的。如果运算符发现,运算子的类型与预期不符,就会自动转换类型。原创 2023-11-30 16:44:14 · 416 阅读 · 4 评论 -
JavaScript包装类型
在ES中,数据的分类分为基本数据类型和引用类型。按照最新ES标准定义,基本数据类型(primitive value)包括undefined、null、boolean、number、symbol、string。引用类型包括Object、Array、Date、RegExp等。原创 2023-11-29 19:59:53 · 384 阅读 · 11 评论 -
JavaScript值和引用
引用一个复杂对象时,使用它的名称(即变量或对象属性)通过内存中的引用地址获取该对象值。直接赋值,就是指将简单值赋值给变量,而引用赋值是指将一个复杂值的引用赋值给变量,这个引用指向堆区实际存在的数据。复杂值支持动态对象属性,因为我们可以定义对象,然后创建引用,再更新对象,并且所有指向该对象的变量都会获得更新。基本数据类型的值又被称之为原始值或简单值,而引用数据类型的值又被称之为复杂值或引用值。基本数据类型的值又被称之为原始值或简单值,而引用数据类型的值又被称之为复杂值或引用值。中,对象就是一个引用值。原创 2023-11-29 17:35:23 · 159 阅读 · 3 评论