- 原文地址:7 JavaScript Fundamentals Every Web Developer Should Know
- 原文做者:Cristian Salcescu
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:Hyde Song
- 校对者:PassionPenguin、greycodee
在本文中,咱们将讨论我认为 JavaScript 最重要、最独特的一些特性。javascript
函数是基本单位,但这里重要的一点是,函数是独立的!在 Java 或 C# 等其余语言中,函数必须在类内声明,但在 JavaScript 中不是这样的。前端
函数能够在全局中被定义,也能够在模块里定义为可重用的单位。java
对象实际上只是属性的集合。在其余语言中,它们被称为 Map、HashMap 或 HashTable。android
对象是动态的,即一旦建立,就能够添加、编辑或删除属性。ios
下面是一个使用字面量语法定义的简单对象。它有两个属性:git
const game = {
title : 'Settlers',
developer: 'Ubisoft'
}
复制代码
若是你曾经使用的语言是相似于 Java 或 C# 等基于 class
的语言,你可能习惯于从其余 class
继承 class
。可是,JavaScript 不是这样的。github
对象继承自称为 prototypes
的对象。web
如前所述,在这种语言中,对象是属性的集合。当建立一个对象时,他有一个名为 __proto__
的隐藏属性,它引用其余对象。这个被引用的对象称为 prototype
。编程
下面是一个建立空对象的例子(能够说,没有属性的对象):后端
const obj = {};
复制代码
即便 obj 看起来是空的没有任何属性,它实际上也是有一个隐藏属性 __proto__
的:
obj.__proto__ === Object.prototype;
//true
复制代码
在这类对象上,咱们能够访问尚未定义的方法,例如 toString
方法,即便咱们尚未定义这样的方法。这怎么可能呢?
此方法继承自 Object.prototype
。当尝试访问该方法时,JS 引擎首先尝试在当前对象上查找该方法,而后再查找其原型上的属性。
不要被 class
关键字误导了。class
只是原型系统的语法糖,帮助来自基于 class
语言的开发者熟悉 JavaScript。
在 JavaScript 中,函数就是值。就像其余值同样,函数能够赋值给变量:
const sum = function(x,y){ return x + y }
复制代码
这在其余编程语言中是作不到的。
与其余值同样,函数能够传递给不一样的函数或被函数返回。下面是一个函数返回另外一个函数的示例:
function startsWith(text){
return function(name){
return name.startsWith(text);
}
}
const games = ['Fornite', 'Overwatch', 'Valorant'];
const newGames = games.filter(startsWith('Fo'));
console.log(newGames);
//["Fornite"]
复制代码
在同一个示例中,咱们能够看到 startsWith
函数返回的函数是如何做为参数发送到 filter
数组方法的。
函数内部能够定义函数。内部函数能够引用其余函数的变量。
并且,外部函数执行后,内部函数能够引用外部函数的变量。下面是关于这方面的例子;
function createCounter(){
let x = 0;
return function(){
x = x + 1;
return x;
}
}
const count = createCounter();
console.log(count());//1
console.log(count());//2
console.log(count());//3
复制代码
count
函数能够从 createCounter
父函数访问 x
变量,即便在执行以后也是如此。count
就是闭包函数。
JavaScript 把基本类型看成对象,从而给人一种错觉。实际上,基本类型并非对象. 基本类型不是属性的集合。
然而,咱们能够在基本类型上调用方法。好比,咱们能够在字符串上调用 toUpperCase
方法:
const upperText = 'Minecraft'.toUpperCase();
console.log(upperText);
//'MINECRAFT'
复制代码
像 Minecraft
这样的简单文本是基本类型,自身没有任何方法。不过 JavaScript 会使用内置的 String 构造函数将其转换为对象,而后咱们就可以对新建立的对象执行 toUpperCase
方法。
经过在底层把基本类型转换为包装对象,JavaScript 容许你调用方法,从而视它们为对象。
JavaScript 单线程的。这意味着在特定时间只执行一条语句。
在主线程中,两个函数不能同时执行。
你也许据说过像 web workers 这种并行执行函数的方式,可是 workers 不会和主线程共享数据。它们只经过信息传递来通讯 —— 什么都不是共享的。
这就容易理解了,咱们只须要注意让函数执行更快就行了。耗费长时间去执行一个函数会让页面无响应。
谢谢阅读。编码快乐!
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。