余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

不知道这10个术语,你还敢说会JavaScript?

xiyangw 2022-11-26 15:45 19 浏览 0 评论

每个行业,都有业内“行话”,不了解这些行话的人,很难融入到行业中,也永远装不了逼。

从Curry到Closes,有很多JavaScript行话(该领域中使用的特殊词汇)知道这些行话不仅能帮助你增加词汇量,还能更好地理解JavaScript。

术语通常出现在文档和技术文章中。但是其中一些像Closes一样是非常标准的事情。了解这个词本身的含义可以帮助您更好地了解它所命名的概念。

今天我们来聊聊 10 个JavaScript术语及其含义和在 JavaScript中使用的上下文的汇编。如果您是初学者,那么此列表为您提供了诸如吊装之类的基础知识。同时,其中还包括鲜为人知或鲜为人知的术语。

1. Arity

Arity(来自拉丁语)是用于指代函数或操作中的参数或操作数数量的术语。当它用于提及JavaScript 函数期望的参数数量时,您最有可能在 JavaScript 领域遇到这个词。

该对象甚至还有一个名为arity的属性,Function返回函数中预期参数的数量。但已经过时,现在是length替代了它返回参数的数量.

以下函数有三个输入参数。

function getName(first, middle, last){
 return first+' '+ middle +' '+last;
 }

2. Anonymous

Anonymous是形容词。当某物或某人被称为Anonymous时,这意味着该物或人的名字是未知的。同样,在 JavaScript 中,Anonymous函数是没有名称标识的函数。

(function (){
 //body
 })();

上面是一个IIFE(立即调用函数表达式)。其中的函数没有名称。我们也看看下面这个

var foo = function() {

 };

这也被称为Anonymous函数,因为关键字后面没有名字function。

在这里,对“Anonymous”的使用我产生了一点疑问,使用 IIFE,该函数被立即调用,不涉及名称,而调用后面函数foo()则需要使用语法。

就像我们用名称'foo'命名了一个无名函数并使用它来调用它。这算Anonymous函数吗?我不知道,这个得问问javascript之父了。抛开我的困惑不谈,它们确实都被称为Anonymous函数。

3. Closure

这是牛津词典中关于关闭的定义之一:“关闭或密封某物的东西,例如帽子或领带。”

在 JavaScript 中,closure是一个内部函数,可以在外部函数范围之外访问,它与外部函数变量的连接仍然完好无损。

为了解释closure(也许不够准确,但足够简单),我们可以将closure视为餐厅的服务员。我们去餐厅吃饭时,饭菜都是厨师做的,厨师大部分时间都在餐厅厨房,餐厅厨房是禁止我们进入的。我们应该如何获得我们的食物呢?

那就是服务员帮忙了。我们点菜,然后服务员会去厨房,将订单通知厨师,并在订单准备好时将饭菜带给我们。这样我们就没有违反任何“规则”,我们就可以享受美食了。

服务员是能够将我们的订单带入厨房并带着食物返回的员工。closure就是类似的“员工”,它们能够从函数内部获取我们的参数带回我们的变量(准确地说是对这些变量的引用)。

function order() {
 var food; 
 function waiter(order) {
 chef(order);
 return food;
 }
 function chef(order) {
 if (order === 'pasta') {
 food = ['pasta', 'gravy', 'seasoning'];
 cook();
 }
 }
 function cook() { food.push('cooked'); }
 return waiter;
 }
 var myOrder = order();
 console.log(myOrder('pasta'));
 // Array [ "pasta", "gravy", "seasoning", "cooked" ]

正如您从上面的代码中看到的那样,除了waiterorder 函数内部的所有内容及其返回值之外的所有内容都不会暴露给外界。

4. Currying

这种效果以Haskell Curry的名字命名,指的是使用具有单参数的多个函数来代替具有多个参数的单个函数。例如,让我们看看下面的add函数。

function addx(x){
 function addy(y){
 return x+y;
 }
 return addy
 }

 function add(x,y){
 return(x+y);
 }

 console.log(addx(3)(4)); \\7
 console.log(add(3,4)); \\7

这两个函数都是返回相同的结果。该函数在返回时addx接受一个参数,该参数又接受该值,执行加法并返回总和。x``addy``y``x

该函数add简单地同时接受两者x,y执行加法并返回总和。到目前为止,第一个功能可能看起来不是很有用,直到……

var add4 = addx(4);
 console.log(add4(8)); //12
 console.log(add4(6)); //10
 console.log(add4(-74)); //-70

现在,前一个函数突然变得有趣起来。在currying中,您总是可以修复一系列操作中的一个步骤,比如从上述代码中添加4,这在操作中使用的一个变量始终相同时很有用。

5. Hoisting

Hoist的意思是举起东西。JavaScript 中的Hoist也意味着相同,提出的是声明(变量和函数声明)。

声明是使用关键字var(不适用于全局)和function.

无论您在哪个地方输入代码来声明函数或变量,在评估期间,所有声明都会在它们所在的范围内向上移动(严格模式除外)。因此,可以编写一个工作代码,将函数调用代码放在函数声明之前。

var name = 'Velma';
 console.log(sayCatchPhrase(name)); /"Jinkies!"

 function sayCatchPhrase(name) {
 phrases = {
 'Fred Flintstone': 'Yabba dabba doo!',
 'Velma': 'Jinkies!',
 'Razor': 'Bingo!',
 'He-Man': 'I Have the Power'
 };
 return phrases[name];
 }

6. Mutation

Mutation意味着改变或修改。如果你在 JavaScript 中遇到过Mutation这个词,它可能指的是 DOM 元素所经历的变化。

甚至还有一个称为 MutationObserver 的 API 可以密切关注 DOM 突变,例如添加子元素更改元素的属性

7. Pragma

Pragma是实用信息的缩写。在简单的英语中,pragmatic 是一个形容词,表示明智和实用。在编程中,pragma是指包含有关编译器或解释器或汇编器应如何处理程序有用信息的代码。

它对编程语言本身没有任何贡献,其语法可能会有所不同。它们只影响编译器的行为。JavaScript 也有很少的 pragma,其中之一是strict.

"use strict";

通过上述 pragma,JavaScript 代码将以严格的模式执行。在严格模式下,不允许错误的语法,不进行提升,显示静默错误等。它有助于编写更安全和优化的 JavaScript 代码

8.Sentinels

Sentinels是守卫的士兵(还记得 X 战警中的哨兵吗?)。在编程中,Sentinels是用来指示循环或过程结束的值。它们也可以称为“flags”。

您可以使用任何合理的值作为sentinel。这是JavaScript 中使用的哨兵的示例;indexOf当在目标字符串中找不到搜索值时返回 -1(标记值)的方法。下面是一个返回数组值位置的函数,如果找不到值,则返回 -1。

function getPos(ary, val) {
 var i=0, len=ary.length; 
 for(;i<len;i++){
 if(ary[i]===val) return i+1;
 } 
 return -1;
 }
 console.log(getPos(['r','y','w'],'y')); //2
 console.log(getPos(['r','y','w'],'g')); //-1

9.Vanilla

这个单词是香草味的意思,哈哈哈,有可能外国人喜欢冰激凌吧。不仅在冰淇淋中,而且在几乎所有甜食中,香草都成为标准口味。我见过不少蛋糕食谱,他们在混合物中至少加入一滴香草——只是为了增加味道。

这就是香草*,一种传统的标准风味。*Vanilla JavaScript 指的是标准 JavaScript——没有框架。Vanilla 实际上不仅用于描述 JavaScript 的标准版本,还用于描述 CSS 等其他语言。

10. Variadic

Variadic是通过连接“variable”和“adicity”而创建的形容词。“Adicity”来自古希腊语,其含义与拉丁词“arity”(此列表中的第 1 项)相同。因此,术语Variadic用于表达具有可变数量参数的东西

在 JavaScript 中,Variadic函数接受任意数量的参数。它可以使用arguments属性、apply方法以及从 ES6 开始的扩展运算符来创建。下面是使用扩展运算符的示例。

function test(...a){
 console.log(a);
 }
 test('a','b','c',8,[56,-89]);
 //output is Array [ "a", "b", "c", 8, Array[2] ]

好了,今天10个JavaScript术语就介绍到这了,大家可以去试试,yyds!

相关推荐

spring利用spring.handlers解析自定义配置(spring validation 自定义)

一、问题我们在spring的xml配置文件里经常定义各种各样的配置(tx、bean、mvc、bean等等)。以及集成第三方框架时,也会看到一些spring之外的配置,例如dubbo的配置、securi...

「Spring源码分析」AOP源码解析(上篇)(spring源码深度解析(第2版))

前言前面写了六篇文章详细地分析了SpringBean加载流程,这部分完了之后就要进入一个比较困难的部分了,就是AOP的实现原理分析。为了探究AOP实现原理,首先定义几个类,一个Dao接口:1&nbs...

Spring 解析注册BeanDefinition这一篇就Over
Spring 解析注册BeanDefinition这一篇就Over

一、简介:学习过Spring框架的人一定都会听过Spring的IoC(控制反转)、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC、...

2023-03-20 14:53 xiyangw

域、模块、空间、闭包,你真的懂了吗?(模块控制域与作用域的关系)

Javascript有一个特性叫做域。尽管对于初学者来说理解域是有难度的,但我会尽力用最简单的方式让你理解域。理解域能让你的代码更优秀,减少错误,及有助于你做出更强大的模式设计。什么是域域是在运行时,...

这一次搞懂Spring自定义标签以及注解解析原理
这一次搞懂Spring自定义标签以及注解解析原理

前言在上一篇文章中分析了Spring是如何解析默认标签的,并封装为BeanDefinition注册到缓存中,这一篇就来看看对于像context这种自定义标签是如...

2023-03-20 14:53 xiyangw

前端基础进阶(七)-前端工程师最容易出错的问题-this关键字
前端基础进阶(七)-前端工程师最容易出错的问题-this关键字

我们在学习JavaScript的时候,因为对一些概念不是很清楚,但是又会通过一些简洁的方式把它给记下来,那么这样自己记下来的概念和真正的概念产生了很强的偏差.当...

2023-03-20 14:52 xiyangw

深入K8s:守护进程DaemonSet及其源码分析(k8s 进程)
深入K8s:守护进程DaemonSet及其源码分析(k8s 进程)

建议学习:膜拜!阿里内部都在强推的K8S(kubernetes)学习指南,不能再详细了最近也一直在加班,处理项目中的事情,发现问题越多越是感觉自己的能力不足,...

2023-03-20 14:52 xiyangw

Spring 是如何解析 bean 标签的?(spring beans标签)
Spring 是如何解析 bean 标签的?(spring beans标签)

前情回顾上回「SpringIoC容器初始化(2)」说到了Spring如何解析我们定义的<bean>标签,代码跟进了一层又一层,跋山涉水,...

2023-03-20 14:52 xiyangw

快速了解JavaScript文本框操作(javascript文本框代码)
快速了解JavaScript文本框操作(javascript文本框代码)

HTML中使用<input>元素表示单行输入框和<textarea>元素表示多行文本框。HTML中使用的<input&...

2023-03-20 14:51 xiyangw

荐读|30道JavaOOP面试题,可以和面试官扯皮了
荐读|30道JavaOOP面试题,可以和面试官扯皮了

面试是我们每个人都要经历的事情,大部分人且不止一次,今天给大家准备了30道JavaOOP面试题,希望能够帮助到对Java感兴趣的同学,让大家在找工作的时候能够...

2023-03-20 14:51 xiyangw

源码系列——mybatis源码刨析总结,下(mybatis源码分析)
源码系列——mybatis源码刨析总结,下(mybatis源码分析)

接上文简答题一.1.Mybatis动态sql是做什么的?1.动态sql就是根据条件标签动态的拼接sql,包括判空,循环,拼接等2.哪些动态sql?动态sql大...

2023-03-20 14:50 xiyangw

Java面试题(第二弹)(java面试题及答案整理)
Java面试题(第二弹)(java面试题及答案整理)

1.抽象类和接口的区别?接口可以被多重implements,抽象类只能被单一extends接口只有定义,抽象类可以有定义和实现接口的字段定义默认为:public...

2023-03-20 14:50 xiyangw

mybatis3 源码深度解析-动态 sql 实现原理(sql数据库基础知识)
mybatis3 源码深度解析-动态 sql 实现原理(sql数据库基础知识)

大纲动态sql使用示例SqlSource和BoundSql以及实现类LanguageDriver以及实现类SqlNode以及实现类动态sql解...

2023-03-20 14:50 xiyangw

第43节 Text、Comment及CDATASection(第43节 Text、Comment及CDATASection)
第43节 Text、Comment及CDATASection(第43节 Text、Comment及CDATASection)

本内容是《Web前端开发之Javascript视频》的课件,请配合大师哥《Javascript》视频课程学习。文本节点用Text类型表示,包含的是可以按字面解释...

2023-03-20 14:49 xiyangw

Qt读写三种文件(qt读取文件数据并赋值给变量)

第一种INI配置文件.ini文件是InitializationFile的缩写,即初始化文件。除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要...

取消回复欢迎 发表评论: