明矛顿了
我很懒,但希望你不要像我
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ES6 中的 class 是什么?和函式构造函式差别是什么?
在 ES6 时引入了 class 的概念,JavaScript class 使用的语法 class 似于其他 OOP 程式语言中的 class,但 JavaScript 的 class 是一种语法糖,本质上与其他程式语言 class 的实践方式不一样,JavaScript 的 class 是透过原型继承来模拟 class 的行为。来实现 class 的私有领域 (Private fields),包括建立私有的属性或是方法,而私有领域只能在 class 内部使用,外部无法存取。,继承 Animal。原创 2024-03-10 09:30:00 · 115 阅读 · 0 评论 -
解释 JavaScript 中 this 的值?
大部分 JavaScript 学习者在学习this概念时通常觉得一头雾水,许多人觉得是 JavaScript 中最复杂的概念之一,然而this值是 JavaScript 面试经典题,搞懂 this 值也是战胜面试的第一步。本篇文章会整理出来this值的 5 种判断方式,让读者在面试时能轻易掌握这些概念。在 JavaScript 中,this的值是动态的,通常会由被呼叫的函式来决定。所以,影响this的值不是宣告的时机,关键在于在哪里被调用。原创 2024-03-13 09:30:00 · 142 阅读 · 0 评论 -
最常见的 JavaScript 原型 (prototype) 面试题 :原型 (prototype)、原型链 (prototype chain) 、原型继承 (prototypal inheritan
回答这个问题可以透过为什么要有原型继承 (Prototypal inheritance)来理解。假设今天有一个物件 「animal」,这个物件拥有自己的属性和方法。同时我们又想建立两个基于「animal」 的物件,分别为分别为「cat」和「dog」,这两个物件会有一些独特的方法和属性,但同时又需要用到「animal」物件的方法和属性。在 JavaScript 里,不需要透过复制或重新实现,就可以通过原型继承 (Prototypal inheritance)达成这个目的。原创 2024-03-12 09:30:00 · 183 阅读 · 0 评论 -
高阶函式 (Higher Order Function) 是什么?
这是一种函式语言程序设计 (functional programming) 的概念,不只 JavaScript,许多程式语言都有支援高阶函式,例如:Python、Swift 等。高阶函式 (Higher order function) 是指当一个函式可以接受另一个函式作为参数、或者返回一个函式作为结果的函式。高阶函式会接受一个回调函式作为参数,并最终返回新的 filtered 后的数组。函式为一个回调函式,传入 filter 函式中作为参数,最终返回结果。为例,并模拟写出一个新的高阶函式。原创 2024-03-11 09:30:00 · 170 阅读 · 0 评论 -
JavaScript 立即调用函式 IIFE (Immediately Invoked Function Expression) 是什么?优缺点是什么?
接着,我们在 window 添加对应的模组对象,实现了对模组的公开。JavaScript 中的立即调用函式 (IIFE,Immediately Invoked Function Expression),指的是一种在定义时立即执行的匿名函式,通常用于创建一个局部作用域,避免全局污染。因此,在循环结束后,i 的值为 6,每个 setTimeout 回调函式引用的都是同一个 i 变量,因此输出的结果都是 6。IIFE 可以在定义时立即执行,避免了函式的不必要的存储和调用,提高了代码的执行效率。原创 2024-03-10 09:30:00 · 117 阅读 · 0 评论 -
什么是箭头函式 (Arrow Function)?跟一般的函式有什么差别?
箭头函式语法不同、写法也较简洁箭头函式没有自己的this、也无法直接修改this的指向箭头函式没有自己的arguments箭头函式不能作为构造函式使用。原创 2024-03-09 09:30:00 · 114 阅读 · 0 评论 -
JavaScript 中的 sort 传入 (a,b) => b - a 会是升序还是降序?为什么呢?
在 JavaScript 中的数组有内建的sort方法,可以让我们不用自己手写排序算法,也能够有高效能的排序方法可用。然而,你知道sort要怎么用吗?在sort中要传入的compareFn又是如何运作的?当compareFn是时,排序会是升序还是降序?为什么呢?这一连串的问题,不仅是工作中很常用到,也是面试的高频问题,务必确保自己这个观念有融会贯通。假如还不熟的话,就让我们一起透过这篇文章一探究竟。原创 2024-03-08 08:15:00 · 168 阅读 · 0 评论 -
JavaScript 中有哪些数组 (Array) 的遍历方法(for loop, for...in, for…of, forEach, map, filter, every, some)
JavaScript 中有哪些数组 (Array) 的遍历方法(for loop, for...in, for…of, forEach, map, filter, every, some)原创 2024-03-07 08:15:00 · 182 阅读 · 0 评论 -
什么是提升 (Hoisting)?
sayHello();// Hello但执行这样的代码并不会报错,其原因就是因为提升 (Hoisting)。提升(Hoisting) 并非中的一个正式定义,但它用来形容 JavaScript 编译阶段将变数和函式的宣告存入记忆体的概念。这个特性会使函式和变量的宣告被提升到作用域的顶部,即使他们的实际定义位置在下面。但要注意,JavaScript 引擎并不会将代码实际移到顶部,而只是这个概念的形容。原创 2024-03-06 08:15:00 · 125 阅读 · 0 评论 -
什么是闭包 (Closure)?
在MDN文件中,闭包被定义为函式以及该函式被宣告时所在的作用域环境(lexical environment) 的组合。白话一点说,闭包就是内部函式能够取得函式外部的变数,并且记住这个变数。因为能够记住这个外部变数,闭包很常被用来做状态保存。以下是一个最简单的例子,在下方代码中的inner函式,能拿到外部函式 outer 的a变数,并将其保存在记忆体中。当我们呼叫inner时,之所以不是每次都回传1,而是回传123不断加上去,正是因为之前的a的状态被记住了。let a = 0;a += 1;原创 2024-03-05 08:15:00 · 105 阅读 · 0 评论 -
Javascript 的作用域 (Scope) 与作用域链 (Scope Chain) 是什么?
作用域这个概念,其实就像是范围的概念。在 JavaScript 里,「有作用」就是指可以被用上,可以被找到。所以,一个值(value)或者一个表达式(expression)可以被使用和找到的范围,我们就称之为作用域。更正式一点来讲,根据MDN的解释,作用域指的是当前正在执行的上下文,也就是程式目前所处的情境。在这个情境内,我们可以轻松地存取各种值(value)或表达式(expression)。换句话说,如果有一个变数或表达式并不在这个情境中,那么就不能轻易地使用它。原创 2024-03-04 08:15:00 · 94 阅读 · 0 评论 -
在 JavaScript 中用 var, let, 以及 const 有什么差别?什么时候该用哪个?
varletconst」是在前端、JavaScript 面试中常见的考题。在面试时可以先大方向地列点说出异同之处,然后再针对每一个点进行深入说明。以下是以第一人称撰写的参考拟答。varlet, 以及const都是在 JavaScript 用来做变数宣告的保留字,在 JavaScript 早期只有var,直到 ES2015 (ES6) 时才加入了let与const。他们之间主要有 4 个不同varletconstvarletconstvarundefinedundefinedletconstlet。原创 2024-02-29 10:00:00 · 82 阅读 · 0 评论 -
严格模式 (use strict) 的用途?有什么好处?
use strict是一个 JavaScript 语法,它告诉执行环境执行代码时应该遵循严格模式。而在严格模式之下,JavaScript 会以更严格的方式执行语法,并且对于一些不符合规范的代码会回报错误。原创 2024-02-29 07:30:00 · 315 阅读 · 0 评论 -
请解释 Set、Map、WeakSet 和 WeakMap 的区别?
可以被垃圾回收机制回收。扩充节点上的资讯,但坏处是会直接修改到这个 DOM 节点、且如果未来这个节点被移除时,相关资讯不会被垃圾回收掉,这时如果是使用 WeakMap 就会是很好的替代方案。WeakMap 中的键名是「弱引用」(weak reference),键名 (key) 所指向的对象可以被垃圾回收,此时的键名 (key) 是无效的。变数获取该对象值,因为其中的引用被断开),但由于 food 与此物件间存在强引用,所以被保留在记忆体中,这就是前面提到的,,不会有重复的值,无论此值是原始型别(原创 2024-02-22 07:15:00 · 80 阅读 · 0 评论 -
在 JavaScript 中,Map 与 object 的差别?为什么有 object 还需要 Map?
ES6 推出了,让开发者可以透过这个特制资料结构进行键值对(key-value pairs) 的操作。然而 JavaScript 原始物件 (plain object) 就可以用来做键值对的操作,为什么还需要 Map 物件呢?Map 物件解决了什么问题?原创 2024-02-21 07:15:00 · 131 阅读 · 0 评论 -
JavaScript null、undefined 与 undeclared 的区别?
这个变数就会是。原创 2024-02-20 07:15:00 · 177 阅读 · 0 评论 -
在 JavaScript 当中,==、=== 与 Object.is()的区别
在 JavaScript 当中有许多可以比较相等与否的方法。其中最常见的三个分别是**===(严格比较)==Object.is(同值比较)**。这三者有什么不同呢?一起来看看这题面试常会被问的基础题吧。==原创 2024-02-19 16:37:33 · 78 阅读 · 0 评论 -
JavaScript 有哪些资料型别 (data types)? 该怎么辨别一个变数的资料型别?
如同绝大多数的程式语言,JavaScript 有其内建的资料型别。其中又有分以及。你知道在 JavaScript 当中有哪些是原生值?哪些是物件?又可以透过什么样的方法来辨别某个变数是什么型别呢?让我们一起来看看这题面试常出现的基础题吧!原创 2024-02-19 16:36:55 · 92 阅读 · 0 评论