不知道这10个术语,你还敢说会JavaScript?
每个行业,都有业内“行话”,不了解这些行话的人,很难融入到行业中,也永远装不了逼。
从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接受一个参数,该参数又接受该值,执行加法并返回总和。xaddy
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!
不知道这10个术语,你还敢说会JavaScript?的更多相关文章
- 如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式
如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式 这是曾经面试中的一道题目,当时的我用现在很潮的话讲,整个人是懵比的,我呆呆的说了句,我好像只知道for循环啊.后来回过神 ...
- 不知道这些,你以为你还能devops?
一.什么是devops 在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软件开发生命周期(SDLC)中的一种开创性方法,在这个模型中,软件开发成为一个线性过 ...
- 【Luogu】【关卡2-16】线性动态规划(2017年10月)【还差三道题】
任务说明:这也是基础的动态规划.是在线性结构上面的动态规划,一定要掌握. P1020 导弹拦截 导弹拦截 P1091 合唱队形 老师给同学们排合唱队形.N位同学站成一排,音乐老师要请其中的(N-K)位 ...
- 【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】
任务说明:这是最基础的动态规划.不过如果是第一次接触会有些难以理解.加油闯过这个坎. 01背包二维数组优化成滚动数组的时候有坑有坑有坑!!!必须要downto,downto,downto 情景和代码见 ...
- 【Luogu】【关卡2-13】线性数据结构(2017年10月)【还差一道题】
任务说明:数组,链表,队列,栈,都是线性结构.巧用这些结构可以做出不少方便的事情. P1996 约瑟夫问题 n个人,排成环形,喊到m的人出列,输出出列顺序. 咳咳,这个题目不好写,尽管简单就是模拟题. ...
- 【Luogu】【关卡2-11】简单数学问题(2017年10月)【还差三道题】
火星人 麦森数 P1403 [AHOI2005]约数研究 f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和. 解答:有几个1做约数的个数 = n /1; 有几个2做约数的个数 = ...
- 10 个非常有用的 SVG 动画的 JavaScript 库
SVG 通常可以用作跨分辨率视频.这意味着在一块高分屏幕上不会降低图片的锐度.此外,你甚至可以让SVG动起来,通过使用一些javascript类库.下面,我们分享一些javascript类库,这些类库 ...
- 10 个超炫绘制图表图形的 Javascript 插件【转载+整理】
原文地址 现在,有很多在线绘制图表和图形(Charts and Graphs)的 JavaScript 插件,这些插件还都是免费,以及图表库.这些插件大量出现的原因是基于一个事实:人们不再依赖于 Fl ...
- 你可能还不知道的关于JavaScript类型的细节?
类型 七种类型: Undefined Null Boolean String Number Symbol Object Undefined.Null 阅读问题:为什么有的编程规范要求使用void 0 ...
随机推荐
- http头文件
http 文件头详解 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写, 它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616.HTTP协议采 ...
- 基于Centos7.X的CS:GO社区服搭建
基于Centos7.X的CS:GO私人服务器搭建 由于比完了赛,在学校太过无聊,便想搭建一个CSGO社区服务器,方便舍友同学进来游玩,顺便帮助一些有想法的人,让他们少走一点弯路 一.创建新用户,并下载 ...
- K8S SVC 转发原理
在前面的文章中,我们已经多次使用到了 Service 这个 Kubernetes 里重要的服务对象.而 Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的,另 ...
- Linux配置 ftp 和 ftp简单介绍
一.ftp概念? /* ftp是一个协议和http协议都是叫协议 tcp和udp也是协议 ftp是文件(以流的形式进行传输)传输协议(针对于文件进行上传和下载) */ 1.如果ftp服务器有多台,服务 ...
- oracle 相关查询和非相关查询,oracle 去除重复数据,以及oracle的分页查询!
一.oracle中的相关查询?和非相关查询? 二.oracle去除重复数据 1. 2. 3.oracle 实现分页? 利用rownum的唯一性,和子查询,将rownum从伪列变成实际列!
- APC 篇—— APC 执行
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- AT2400 [ARC072B] Alice&Brown
通过打表后可以发现,当初始石头数 \(|X - Y| \le 1\) 时先手必败否则先手必胜. 我们考虑使用归纳证明这个结论,显然 \((1, 0), (1, 1)\) 时是成立的. 基于观察,我们可 ...
- AT5760 Manga Market
首先一个想法就是可以考虑令 \(dp_{i, j}\) 表示当前考虑到了第 \(i\) 个商店,当前到了时刻 \(j\) 能走过最多的商店数量.但是你会发现这个 \(dp\) 转移的顺序并不是简单的从 ...
- springboot加载外部配置文件
网上搜集和整理如下(自己已验证过) 1. war包在tomcat中加载外部配置文件 war包运行在独立tomcat下时,如何加载war包外部配置application.properties,以达到每次 ...
- android+json+php+mysql实现用户反馈功能
相信每个项目都会有用户反馈建议等功能,这个实现的方法很多,下面是我实现的方法,供大家交流.首先看具体界面,三个字段.名字,邮箱为选填,可以为空,建议不能为空.如有需要可以给我留言. 下面贴出布局代码, ...