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

从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?的更多相关文章

  1. 如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式

    如果要遍历除了for循环,你还知道什么?——JavaScript的各种遍历方式 这是曾经面试中的一道题目,当时的我用现在很潮的话讲,整个人是懵比的,我呆呆的说了句,我好像只知道for循环啊.后来回过神 ...

  2. 不知道这些,你以为你还能devops?

    一.什么是devops 在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软件开发生命周期(SDLC)中的一种开创性方法,在这个模型中,软件开发成为一个线性过 ...

  3. 【Luogu】【关卡2-16】线性动态规划(2017年10月)【还差三道题】

    任务说明:这也是基础的动态规划.是在线性结构上面的动态规划,一定要掌握. P1020 导弹拦截 导弹拦截 P1091 合唱队形 老师给同学们排合唱队形.N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  4. 【Luogu】【关卡2-15】动态规划的背包问题(2017年10月)【还差一道题】

    任务说明:这是最基础的动态规划.不过如果是第一次接触会有些难以理解.加油闯过这个坎. 01背包二维数组优化成滚动数组的时候有坑有坑有坑!!!必须要downto,downto,downto 情景和代码见 ...

  5. 【Luogu】【关卡2-13】线性数据结构(2017年10月)【还差一道题】

    任务说明:数组,链表,队列,栈,都是线性结构.巧用这些结构可以做出不少方便的事情. P1996 约瑟夫问题 n个人,排成环形,喊到m的人出列,输出出列顺序. 咳咳,这个题目不好写,尽管简单就是模拟题. ...

  6. 【Luogu】【关卡2-11】简单数学问题(2017年10月)【还差三道题】

    火星人 麦森数 P1403 [AHOI2005]约数研究 f(n)表示n的约数个数,现在给出n,要求求出f(1)到f(n)的总和. 解答:有几个1做约数的个数 = n /1; 有几个2做约数的个数 = ...

  7. 10 个非常有用的 SVG 动画的 JavaScript 库

    SVG 通常可以用作跨分辨率视频.这意味着在一块高分屏幕上不会降低图片的锐度.此外,你甚至可以让SVG动起来,通过使用一些javascript类库.下面,我们分享一些javascript类库,这些类库 ...

  8. 10 个超炫绘制图表图形的 Javascript 插件【转载+整理】

    原文地址 现在,有很多在线绘制图表和图形(Charts and Graphs)的 JavaScript 插件,这些插件还都是免费,以及图表库.这些插件大量出现的原因是基于一个事实:人们不再依赖于 Fl ...

  9. 你可能还不知道的关于JavaScript类型的细节?

    类型 七种类型: Undefined Null Boolean String Number Symbol Object Undefined.Null 阅读问题:为什么有的编程规范要求使用void 0 ...

随机推荐

  1. python中grpc配置asyncio使用

    python中grpc配置asyncio使用 安装grpclib pip3 install grpclib protoc编译.proto文件,生成源码文件 python -m grpc_tools.p ...

  2. 使用jQuery所需添加的头文件

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> 在html文件中输入 ...

  3. python封装函数到模块

    导入整个模块: import 模块名 导入特定函数: from module_name import function_name 通过逗号可以分割函数名,如果需要导入多个则 from a import ...

  4. Unity——日志打印工具

    一.日志工具功能 封装Debug类,需要实现功能: 1.控制所有日志是否打印: 2.除了Log,Warning,Error外,给更多日志种类(不同颜色): 3.格式化打印日志: 4.不定参数,自动拼接 ...

  5. Vue2和Vue3技术整理1 - 入门篇 - 更新完毕

    Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...

  6. 寻找写代码感觉(十六)之 集成Validation做参数校验

    写在前面 今天是大年初五了... 不知不觉,又要上班了,美好的假期只剩一天了,有点不舍呢! 也不知道为什么,总感觉像在做梦一样,像没睡醒一样,并不是因为眼睛小,更多应该是自寻烦恼,想得多罢了. 参数校 ...

  7. git merge -ff --no-ff --squash 的区别

    感谢原文作者:futureme 原文链接:https://www.cnblogs.com/taylorluo/articles/10810762.html git merge #没有参数(默认为–ff ...

  8. laravel操作Redis排序/删除/列表/随机/Hash/集合等方法全解

    Song • 3563 次浏览 • 0 个回复 • 2017年10月简介 Redis模块负责与Redis数据库交互,并提供Redis的相关API支持: Redis模块提供redis与redis.con ...

  9. 集合、Collection、list、set、HashSet

    一.集合的理解:将多个数据放在一起 简介: 1).可以动态保存任意多个对象,使用比较方便!2).提供了一系列方便的操作对象的方法: add.remove.set. get等 1.集合中的实现和继承图 ...

  10. java程序出现oom如何解决?什么场景下会出现oom?

    1.什么是oom? OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",来源于java.lang.OutOfMemoryError. 当J ...