每个前端开发者都应该知道的33个JavaScript概念你可能知道也可能不知道,你甚至可能没有听说过。这些概念前端应该都知道,那我们就开始吧。1.调用栈调用栈是解释器(例如Web浏览器中的JavaScript解释器)用来跟踪其在调用多个函数的脚本中的位置的机制——当前运行的是什么函数,以及从哪个函数运行function调用了什么函数,等等。2.原始类型除了对象,所有类型都定义了不可变值(即不能改变的值)。例如(与C语言不同),字符串是不可变的。我们将这些类型的值称为“原始值”。3.值和引用类型分配了非原始值的变量被分配了对该值的引用。此引用指向对象在内存中的位置。该变量实际上并不包含该值。4.Implicit,Explicit,Nominal,StructuringandDuckTypingtypecoercion是指当一个运算符的操作数是不同类型时,其中一个操作数将被转换为另一个操作数类型的“等价”值。参考:https://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript。5.==vs===vstypeofJavaScript有两种视觉上相似但非常不同的方法来测试相等性。您可以使用==或==测试是否相等。6.函数作用域、块作用域和词法作用域1:函数作用域2:块作用域3:Notation作用域。7.表达式与声明式区分这一点很重要,因为表达式可以像声明式一样工作,这就是我们也有表达式语句的原因。然而,另一方面,声明式不能像表达式一样工作。8.IIFE、模块和命名空间参考:https://vvkchandra.medium.com/essential-javascript-mastering-immediately-invoked-function-expressions-67791338ddc6。9.消息队列和事件循环《JavaScript是如何实现异步和单线程的?》简短的回答是JavaScript语言是单线程的,异步行为不是JavaScript语言本身的一部分,而是构建在核心JavaScript语言之上的浏览器(或编程环境)上,并通过浏览器的API访问。参考:https://medium.com/front-end-weekly/javascript-event-loop-explained-4cd26af121d4。10、setTimeout、setInterval和requestAnimationFrame我们希望Riemann不要执行一个函数,而是在稍后的某个时间执行。这称为“预定呼叫”。参考:https://javascript.info/settimeout-setinterval。11.JavaScript引擎为Web编写代码有时感觉有点神奇,因为开发人员编写了一系列字符,这些字符在浏览器中变成了具体的图像、文字和动作。了解这项技术可以帮助开发人员更好地微调他们作为程序员的技能。参考:http://www.softwaremag.com/javascript-engines/。12.按位运算符、类型数组和数组缓冲区从技术上讲,对于计算机来说,一切都是1和0。它不使用数字、字符或字符串,它只使用二进制数字(位)。简单解释主要湍流,一切都以二进制形式存储。然后计算机使用UTF-8等编码将保存的位组合映射到字符、数字或不同的符号(ELI5版本)。参考:https://hackernoon.com/programming-with-js-bitwise-operations-393eb0745dc4。13.DOM和布局树文档对象模型(DocumentObjectModel),通常简称为DOM,是使网站具有交互性的一个重要部分。它是一个允许编程语言操纵网站内容、结构和风格的界面。JavaScript是一种连接到Internet浏览器中的DOM的客户端脚本语言。参考:https://www.digitalocean.com/community/tutorials/introduction-to-the-dom。14.工厂和类JavaScript是一种基于原型的语言,这意味着对象的属性和方法可以通过具有克隆和扩展能力的通用对象来共享。这称为原型继承,不同于类继承。参考:https://www.digitalocean.com/community/tutorials/understanding-prototypes-and-inheritance-in-javascript。15.this、call、apply和bind函数对每个JavaScript开发人员都非常重要,几乎每个JavaScript库或框架都会用到。参考:https://levelup.gitconnected.com/grokking-call-apply-and-bind-methods-in-javascript-392351a4be8b。16.new、Constructor、instanceof和Instances每个JavaScript对象都有一个原型。JavaScript中的所有对象都从它们的原型继承它们的方法和属性。参考:https://codeburst.io/javascript-for-beginners-the-new-operator-cee35beb669e。17.原型继承和原型链对于有基于类的语言(如Java或C++)经验的开发者来说,JavaScript有点令人困惑,因为它是动态的,本身不提供类实现(class是在ES2015关键字中引入的,但它只是语法糖,JavaScript仍然是基于原型的)。参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain。18.Object.create和Object.assignObject.create方法是在JavaScript中创建新对象的方法之一。参考:https://medium.com/@happymishra66/object-create-in-javascript-fa8674df6ed2。19.map、reduce、filter即使你不知道什么是函数式编程,你也可能一直在使用map、filter和reduce,因为它们非常有用,可以让你编写更干净的逻辑,让你的代码不那么坏的。参考:https://medium.com/@bojangbusiness/javascript-functional-programming-map-filter-and-reduce-846ff9ba492d。20.纯函数、副作用、状态突变和事件传播我们的许多错误都源于与IO相关的、数据突变的、具有副作用的代码。这些问题在我们的代码库中随处可见——从接受用户输入,通过http调用接收意外响应,或者写入文件系统等等。这是一个残酷的现实,所以我们必须正确对待它并解决它.参考:https://hackernoon.com/javascript-and-functional-programming-pt-3-pure-functions-d572bb52e21c。21.闭包闭包是将函数与其周围状态(词法环境)的引用捆绑在一起的组合。换句话说,闭包允许我们从内部函数访问外部函数的范围。在JavaScript中,每次创建函数时都会创建闭包。参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures。22.高阶函数JavaScript可以接受高阶函数。这种处理高阶函数的能力以及其他特性使JavaScript成为非常适合函数式编程的编程语言之一。参考:https://www.sitepoint.com/higher-order-functions-javascript/。23.递归参考:https://www.freecodecamp.org/news/recursion-in-javascript-1608032c7a1f。24.收集器和生成器生成器对象由生成器函数返回,它同时符合可迭代协议和迭代器协议。参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator。25.PromisePromise对象表示一个异步操作的最终完成(或失败)及其结果值。参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise。26.异步/等待参考:https://javascript.info/async-await。27.数据结构Javascript每天都在发展。随着React、Angular、Vue、NodeJS、Electron、ReactNative等框架和平台的快速发展,在大型应用中使用javascript变得相当普遍。参考:https://blog.cloudboost.io/playing-with-data-structures-in-javascript-stack-a55ebe50f29d。28.昂贵的操作和大O符号“什么是大O符号?”这是一个非常常见的开发人员工作面试问题。简而言之,它是给定输入量(通常是最坏情况)的算法运行时间的数学表达式。参考:https://medium.com/cesars-tech-insights/big-o-notation-javascript-25c79f50b19b。29.算法在数学和计算机科学中,算法是定义明确的指令的有限序列,通常用于解决特定类别的问题或执行计算。30.继承、多态和代码重用类继承是一个类扩展另一个类的一种方式,因此我们可以在现有功能之上创建新功能。参考:https://javascript.info/class-inheritance。31.设计模式每个开发人员都努力编写可维护、可读和可重用的代码。随着应用程序变得越来越大,构建代码变得更加重要。设计模式被证明是解决这一挑战的关键——为给定情况下的常见问题提供组织结构。参考:https://www.digitalocean.com/community/tutorial_series/javascript-design-patterns。32.部分应用、柯里化、组合和流水线函数组合是一种组合多个简单函数以构建更复杂函数的机制。参考:https://www.codementor.io/@michelre/use-function-composition-in-javascript-gkmxos5mj。33.干净的代码编写干净、易懂、可维护的代码是每个开发人员都必须掌握的技能。参考:https://www.freecodecamp.org/news/clean-coding-for-beginners/。如果您觉得此列表有用,请不要忘记将其添加为书签并关注我以获取更多此类内容。作者:AhmadShadeed译者:前端小智。来源:devhttps://dev.to/eludadev/33-javascript-concepts-every-beginner-should-know-with-tutorials-4kao。
