术语的目的是将一个特定的想法封装成一个漂亮而紧凑的词。但是,如果你不理解这些词的意思,就会失去意义。在开发人员的世界中,更高级的主题往往遥不可及,并且常常让新开发人员望而却步。部分原因是他们似乎在读一本外国小说。字母和单词可能看起来很熟悉,但它们没有意义。而且很难理解所有内容,尤其是如果您必须一直停在第二个词上以弄清楚句子试图告诉您什么。在本文中,我决定整理我经常发现自己为新开发人员翻译的前7个概念。我希望您发现它们对成为更好的开发人员有用。本文的目的是作为参考/想法总结,让您尽快开始解决问题。每个术语本身就是一个主题,但为了篇幅和可读性,我已尽可能将其缩减为核心思想。这本书远不止于此,但总的来说,它抓住了每个词试图传达的本质。希望你觉得它们有用。感谢您的阅读!1.不变性当数据的形状不改变时。因此,如果您有一个进入函数的对象,它会以完全相同的形式从函数中出来。附加的数据可以改变,但参数的数量、名称和顺序不能改变。例如,这里有一个突变:functionchangeMe(someObject){someObject.age=3;returnsomeObject;}letexampleOne={"cat":"Tibbers"};console.log(changeMe(exampleOne));该函数改变对象的形状,这意味着它是可变的。2.声明式无论您按什么顺序做事,基本规则都能确保您每次都能得到相同且正确的结果。例如,这个数学等式遵循声明式方法。(2x5)+8-3=15所以如果你改变顺序,你仍然会得到相同的结果。-3+(2x5)+8=158-3+(2x5)=15在JavaScript编程中,声明式模式是函数的顺序与最终结果的构造方式无关的地方。您可以按任何顺序调用它们。顺序无关紧要。3.递归是函数不断调用自身,直到满足某个条件。不,这不是for循环。听起来可能是这样,但事实并非如此。for循环是JavaScript中的一种条件方法。递归是一个不断调用自身的完整函数。这意味着递归有两个部分——基于特定条件的调用和退出子句。您的exit子句基本上是在递归结束时发生的事情。下面是一个简单的潜在递归:functionssumProfit(sales){if(//conditionforending){returntheFinalObjectOrResult;}else{//dosomething.Reducethecondition.returnsumProfit(reducedCondition);}}4.Callback回调是在另一个函数执行完刚刚执行的函数之后.我们为什么需要这个?因为JavaScript是事件驱动的——这意味着它不等待响应。当事情以自给自足的方式运行时,这并不重要。当您开始依赖API等外部响应时,情况会变得严重。延迟是您的JavaScript代码发送请求和接收请求所花费的时间。从JavaScript的角度来看,它已经完成了它的工作——它已经成功地执行了代码。然而,实际上,您仍在等待响应。有时您会强制代码冷却、放松并使用promises或延迟计时器等待一段时间。确认完成后,就可以调用callback()函数了。不管怎样,回调看起来是这样的:您还可以抽象出回调,并使其看起来像这样:5.异步想到一条直线。您的JavaScript代码从一端执行到另一端。但有时,你需要停下来,就在你跑到外部资源去抓东西的那一刻。暂停的时刻是JavaScript的异步部分。关键字async也返回一个隐式的Promise。隐含是什么意思?默认情况下,它返回一个承诺。什么是承诺?这就是告诉您的代码等待的原因,因为完成某些工作会有延迟。例如,您正在等待外部API以正确的数据响应。为什么这很重要?因为您可以将then()与异步函数一起使用。那么什么是()?您的回调相当于一个基于承诺的函数,它允许您在承诺完成执行后执行操作。那看起来像什么?这是一个例子:asyncfunctiondoSomething(){//dosomethingthere.return'woot!';}doSomething().then(function(result){console.log(result);});或者,如果你真的想让承诺部分明确:asyncfunctiondoSomething(){//dosomethingthere.returnPromise.resolve('woot!');}doSomething().then(function(result){console.log(result);});6.代理将其视为对象的附加扩展。可以为已经存在的事物创建自定义行为。在某种程度上,它也充当原始对象和其他功能之间的中介。是的。代理可以更改和处理数据。是的。除其他外,它通常用作验证检查器。它是如何工作的?代理由三部分组成——处理程序、陷阱(即方法)和目标。有13个陷阱可供代理使用。您需要通过Google搜索它们,因为这超出了本文的范围。下面是一个实施陷阱的代理示例:lethandler={get:function(theObjectPassed,theObjectName){//somecheckinglogicconsole.log(theObjectPassed,theObjectName);return'alldone';}}letsomeObject={a:1,b:2};letvalueName=newProxy(someObject,handler);console.log(valueName.someObject);Proxies可以做的远不止这些,但是这个例子只是一个起点。7.垃圾收集一切都占用内存。变量初始化后,会为其分配一点空间。内存仅在调用时初始化。因此,当一个函数运行并且其中有一个变量时,它只存在于函数需要它的时候。它不会粘在周围。垃圾收集是清除内存的方式。内存泄漏是指变量没有被垃圾回收,因为它是在全局空间中声明的,这会污染并占用不必要的空间。这太多了,您的应用程序可能会变慢。所以尽可能保留变量并使用null去初始化你不需要的东西
