乐趣区

关于前端:每个开发者都应该知道的33个JavaScript概念

作者:Ahmad Shadeed
译者:前端小智
起源:dev

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

首先,问大家一个问题,你对 JS 的熟练程度有多深?

明天,咱们来介绍一下 JS 中的 33 个概念,这些概念中,你可能晓得,也有可能不晓得,甚至连听都没听过。

这些概念是作为前端都应该须要晓得的,那咱们开始吧。

1. 调用堆栈

调用堆栈是一种机制,用于解释器(如网络浏览器中的 JavaScript 解释器)跟踪其在调用多个函数的脚本中的地位 – 以后正在运行什么函数,以及从该函数中调用什么函数,等等。

2. 原始类型

除了对象之外,所有的类型都定义了不可变的值(也就是说,不能扭转的值)。例如(与 C 语言不同),字符串是不可变的。咱们把这些类型的值称为 “ 原始值 ”。

3. 值类型和援用类型

被调配了一个非原始值的变量被赋予了一个对该值的援用。该援用指向该对象在内存中的地位。变量实际上并不蕴含该值。

4. Implicit, Explicit, Nominal, Structuring and Duck Typing

类型强制是指当运算符的操作数为不同类型时,其中一个操作数将被转换为另一个操作数类型的 “ 等价 “ 值。

参考:https://stackoverflow.com/que…

5. == vs === vs typeof

JavaScript 有两种视觉上类似但又十分不同的办法来测试相等性。你能够用 ==== 来测试相等性。

6. 函数作用域,块作用域和词法作用域

1: 函数作用域
2:块作用域
3:记法作用域

7. 表达式与申明式

进行这种辨别很重要,因为表达式能够像申明式一样口头,这就是为什么咱们也有表达式语句。然而,另一方面,申明式不能像表达式那样口头。

8. IIFE,模块和命名空间

参考:https://vvkchandra.medium.com…

9. 音讯队列和事件循环

“JavaScript 是如何做到异步和单线程的?” 简短的答复是,JavaScript 语言是单线程的,异步行为不是 JavaScript 语言自身的一部分,而是建设在浏览器(或编程环境)中的外围 JavaScript 语言之上,并通过浏览器的 API 拜访。

参考:https://medium.com/front-end-…

10. setTimeout, setInterval 和 requestAnimationFrame

咱们心愿不要黎曼执行一个函数,而是在当前的某个工夫执行。这就是所谓的 “ 调度调用 ”。

参考:https://javascript.info/setti…

11. JavaScript 引擎

为 Web 编写代码有时感觉有点神奇,因为开发人员编写了一系列字符,这些字符在浏览器中变成了具体的图像、文字和动作。了解这项技术能够帮忙开发人员更好地调整他们作为程序员的技能。

参考:http://www.softwaremag.com/ja…

12. 按位运算符,类型数组和数组缓冲区

从技术上来说,对于计算机来说,所有货色都是 1 和 0。它不应用数字、字符或字符串,它只应用二进制数字(位)。简略解释主浊,所有货色都以二进制模式存储。而后计算机应用诸如 UTF- 8 之类的编码将保留的位组合映射到字符、数字或不同的符号(ELI5 版本)。

参考:https://hackernoon.com/progra…

13. DOM 和布局树

文档对象模型(Document Object Model),通常被称为 DOM,是使网站具备交互性的重要组成部分。它是一种容许编程语言操作网站内容、构造和格调的界面。JavaScript 是连贯到互联网浏览器中的 DOM 的客户端脚本语言。

参考:https://www.digitalocean.com/…

14. 工厂和类

JavaScript 是一种基于原型的语言,意味着对象的属性和办法能够通过具备克隆和扩大能力的通用对象来共享。这被称为原型继承,与类继承不同。

参考:https://www.digitalocean.com/…

15. this, call, apply 和 bind

这些函数对每个 JavaScript 开发者来说都十分重要,简直每个 JavaScript 库或框架都会用到。

参考:https://levelup.gitconnected….

16. new, Constructor, instanceof 和 Instances

每个 JavaScript 对象都有一个原型。JavaScript 中的所有对象都从其原型继承其办法和属性。

参考:https://codeburst.io/javascri…

17. 原型继承和原型链

对于有基于类的语言(如 Java 或 C ++)教训的开发者来说,JavaScript 有点令人困惑,因为它是动静的,自身不提供类的实现(ES2015 中引入了 class的关键字,但只是语法糖,JavaScript 依然是基于原型的)。

参考:https://developer.mozilla.org…

18. Object.create 和 Object.assign

Object.create 办法是在 JavaScript 中创立一个新对象的办法之一。

参考:https://medium.com/@happymish…

19. map, reduce, filter

即便你不晓得函数式编程是什么,你也可能始终在应用 map、filter 和 reduce,因为它们十分有用,能够让你写出更整洁的逻辑,从而让你的代码不那么蹩脚。

参考:https://medium.com/@bojangbus…

20. 纯函数、副作用、状态渐变和事件流传

咱们的许多 bug 都源于与 IO 相干的、数据渐变的、产生副作用的代码。这些问题在咱们的代码库中随处可见 – 从承受用户输出、通过 http 调用接管一个意外的响应,或向文件系统写入等。是一个残暴的事实,所以咱们也要正确的看待并解决它。

参考:https://hackernoon.com/javasc…

21. 闭包

闭包是将函数与对其四周状态 (词法环境) 的援用捆绑在一起的组合。换句话说,闭包容许咱们从外部函数拜访内部函数的作用域。在 JavaScript 中,闭包在每次创立函数时创立。

参考:https://developer.mozilla.org…

22. 高阶函数

JavaScript 能够承受高阶函数。这种解决高阶函数的能力,以及其余特点,使 JavaScript 成为非常适合函数式编程的编程语言之一。

参考:https://www.sitepoint.com/hig…

23. 递归

参考:https://www.freecodecamp.org/…

24. 收集器和生成器

生成器对象是由生成器函数返回的,它同时合乎可迭代协定和迭代器协定。

参考:https://developer.mozilla.org…

25. Promise

Promise 对象示意一个异步操作的最终实现(或失败)及其后果值。

参考:https://developer.mozilla.org…

26. async/await

参考:https://javascript.info/async…

27. 数据结构

Javascript 每天都在一直倒退。随着 React、Angular、Vue、NodeJS、Electron、React Native 等框架和平台的迅速倒退,在大规模利用中应用 javascript 曾经变得相当广泛。

参考:https://blog.cloudboost.io/pl…

28. 低廉的运算和大 O 符号

“ 什么是大 O 符号?” 这是一个十分常见的开发人员的工作面试问题。简而言之,它是一种数学表达方式,即依据输出的工夫长短,一个算法须要运行多长时间,通常说的是最坏状况。

参考:https://medium.com/cesars-tec…

29. 算法

在数学和计算机科学中,算法是一个定义明确的指令的无限序列,通常用于解决一类特定问题或进行计算。

30. 继承、多态性和代码重用

类的继承是一个类扩大另一个类的形式,因而咱们能够在现有的根底上创立新的性能。

参考:https://javascript.info/class…

31. 设计模式

每个开发人员都在致力编写可保护、可浏览和可重用的代码。当应用程序变得越来越大时,代码的结构化变得更加重要。设计模式被证实是解决这一挑战的要害 – 为特定状况下的独特问题提供一个组织构造。

参考:https://www.digitalocean.com/…

32. 部分利用、柯里化、组成和管道

函数组合是一种将多个简略的函数组合起来以建设一个更简单的函数的机制。

参考:https://www.codementor.io/@mi…

33. 简洁代码

编写洁净的、可了解的、可保护的代码是每个开发者都要把握的一项技能。

参考:https://www.freecodecamp.org/…

如果你感觉这份清单很有用,别忘了把它珍藏起来,并关注我以取得更多相似的内容。


编辑中可能存在的 bug 没法实时晓得,预先为了解决这些 bug, 花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

https://dev.to/eludadev/33-ja…

交换

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

退出移动版