不知道这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接受一个参数,该参数又接受该值,执行加法并返回总和。xaddyy``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 ...
随机推荐
- eclipse不能创建web项目,如何设置(亲测可用)
具体描述:就是在项目右键或者file-->new的时候没有dynamic web project选项)(我这里已经解决.所以看得到) 根本原因:就是有没有web的开发插件 两种办法 1.下载使用 ...
- 从容器镜像的选择-alpine 说起
在 容器崛起之前,Alpine 还是个无名之辈,可能是因为大家并不是很关心操作系统本身的大小,毕竟大家只关心业务数据和文档,程序.库文件和系统本身的大小通常可以忽略不计. 容器技术席卷整个软件产业之后 ...
- Selenium&PhantomJS 完成爬取网络代理
Selenium模块是一套完整的Web应用程序测试系统,它包含了测试的录制(SeleniumIDE).编写及运行(Selenium Remote Control)和测试的并行处理(Selenimu G ...
- 集合框架-Map集合练习-记录字母次数思路及代码
1 package cn.itcast.p10.map.test; 2 3 import java.util.Iterator; 4 import java.util.Map; 5 import ja ...
- mysqldump 逻辑备份和物理备份
逻辑备份 逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现. 工具:mysqldump 特点: 1.可移植性比较强 2.备份和恢复的花费时间长,不适用于大型业务系统 物理 ...
- Vulnhub靶机系列之Acid
Acid 下载地址: https://download.vulnhub.com/acid/Acid.rar https://download.vulnhub.com/acid/Acid.rar ...
- 在树莓派上开发SpringBoot 之使用VSCode远程开发
一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口.本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和 ...
- SpringMVC之RedirectAttributes属性
RedirectAttributes是SpringMVC3.1版本之后出来的一个新功能,专门用于重定向之后还能带参数跳转的的工具类. 两种带参方式: redirectAttributes.addAtt ...
- hashmap 实现 相同的key值时,value值叠加效果。
一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...
- Linux配置Redis集群 和 缓存介绍。
// 一.什么是缓存? mybatis一级缓存和二级缓存 mybatis的一级缓存存在哪? SqlSession,就不会再走数据库 什么情况下一级缓存会失效? 当被更新,删除的时候sqlsession ...