现代 JavaScript 参考

本指南不是为了教你从头开始学习 JavaScript ,而是为了帮助那些可能不熟悉当前代码库(例如 React)所用到 JavaScript 概念的开发人员。

此外,我有时还会提供一些个人的建议,这些建议可能是有争议的,但我也会注意到,当我这么做的时候,这是我个人的建议。

注意: 这里介绍的大多数概念来自于最新的 JavaScript 语言( ES2015,通常称为 ES6)。你可以在 这里 找到新增的特性,网站做得很棒。

补充资源

当您努力了解一个新概念时,我建议你在以下资源网站上寻找相关的答案:

目录

概念

变量声明: var, const, let

在 JavaScript 中,有 3 个关键字可用于声明一个变量,他们之间有些差异。那些是 var ,let 和 const。

简单说明

使用 const 关键字声明的变量无法重新分配,而 let 和 var 可以。

我建议总是默认使用 const 来声明你的变量,如果你需要改变它,或者稍后需要重新分配,那么实用 let 。

作用域 可否重新分配 可变性
const Block   No     Yes  
let Block   Yes   Yes   Yes  
var Function   Yes   Yes   No  

简单的示例 const person = "Nick"; person = "John" // 将会引起错误,person 不能重新分配 let person = "Nick"; person = "John"; console.log(person) // "John", 使用 let 允许重新分配

详细说明

变量的 大致意思是“在哪里可以访问这个变量”。

var

var 声明的变量是 函数作用域 ,这意味着当在函数中创建变量时,该函数中的所有内容都可以访问该变量。
此外,函数中创建的 函数作用域 变量无法在此函数外访问。

我建议你把它看作一个 X 作用域 变量,意味着这个变量是 X 的属性。

function myFunction() { var myVar = "Nick"; console.log(myVar); // "Nick" - 在这个函数中 myVar 可被访问到 } console.log(myVar); // 抛出错误 ReferenceError, 在函数之外 myVar 则无法访问

继续关注变量的作用域,这里是一个更微妙的例子:

function myFunction() { var myVar = "Nick"; if (true) { var myVar = "John"; console.log(myVar); // "John" // 实际上,myVar是函数作用域,我们只是将之前 myVar 的值 "Nick" 抹去,重新声明为 "John" } console.log(myVar); // "John" - 看看 if 语句块中的指令是如何影响这个值的 } console.log(myVar); // 抛出错误 ReferenceError, 在函数之外 myVar 则无法访问

此外,在执行过程中,var声明的变量被移动到范围的顶部。这就是我们所说的。

这部分的代码:

console.log(myVar) // undefined -- 不会报错 var myVar = 2;

在执行时,被解析为:

var myVar; console.log(myVar) // undefined -- 不会报错 myVar = 2;

愚人码头注:变量提升和函数声明提升可以查看:JavaScript 中的 Hoisting (变量提升和函数声明提升)

let

var 和 let 大致相同,但是用 let 声明的变量时有以下几个特性:

块级作用域( block scoped )

在被分配之前, 无法 访问使用

在同一个作用域之下,不能重新声明

我们来看看我们前面的例子,采用块级作用域( block scoping )后的效果:

function myFunction() { let myVar = "Nick"; if (true) { let myVar = "John"; console.log(myVar); // "John" // 实际上 myVar 在块级作用域中,(在 if 语句块中)我们只是创建了一个新变量 myVar。 // 此变量在 if 语句块之外不可访问, // 完全独立于创建的第一个 myVar 变量! } console.log(myVar); // "Nick", 可以看到 if 语句块中的指令不会影响这个值 } console.log(myVar); // 抛出错误 ReferenceError,myVar 无法在函数外部被访问。

现在,我们来看看 let(和 const)变量在被赋值之前不可访问是什么意思:

console.log(myVar) // 抛出一个引用错误 ReferenceError ! let myVar = 2;

与 var 变量不同的是,如果你在 let 或者 const 变量被赋值之前读写,那么将会出现错误。这种现象通常被称为暂存死区()或者 TDZ。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywxjf.html