共计 1881 个字符,预计需要花费 5 分钟才能阅读完成。
应用 let 申明变量
关键字 let
是 ES6
中新增的个性,它的呈现是为了解决 var
变量申明所存在的一些问题,let
申明变量的语法和 var
的很像,例如:
let a = 1;
其实 let
与 var
的要害的区别不在于语法,而在于语义。
在 let
中引入了块级作用域(也可称为词法作用域)。块级作用域是什么意思呢?咱们晓得应用大括号 {}
突围代码能够叫做代码块,举个例子,比如说 if
、for
等语句的执行代码都是通过一个大括号 {}
突围对吧,这个大括号中的就是代码块。如果咱们在大括号中应用 let
关键字申明一个变量,那么这个变量的作用域就只在这个大括号中,在大括号之外不能应用,这就是块级作用域了。
所以这一点也是 let
和 var
之间的区别,如果同样是在某个函数中的 if
语句内申明变量,var
申明的变量作用域范畴在整个函数,而 let
申明的变量的范畴仅在 if
语句中。
示例:
咱们能够看上面这段代码,在函数 myFunc
中应用 let
申明了一个变量 a,且在 if
语句中申明了一个变量 b
:
function myFunc(){
let a = 10;
if(a > 5) {
let b = a;
return b;
}
return b;
}
依据咱们下面讲的块级作用域,能够晓得变量 a
的作用域就在整个 myFunc()
函数中,而变量 b
的作用域在 if
语句块中,变量 a
能够在函数内应用,然而如果咱们在 if
语句以外的中央应用变量 b
,则会出错。
下图是 VSCode 编辑器提醒咱们的报错信息:
当初咱们应该明确什么是块级作用域了吧,如果还不分明,那就本人入手试一下吧。
变量晋升
当咱们应用关键字 var
申明变量时会进行变量晋升,而应用关键字 let
来申明变量能够帮忙咱们解决这个问题。
变量晋升是什么意思呢,就是变量能够在应用后申明,也就是变量能够先应用再申明。然而要留神哟,变量晋升只会晋升申明,不会晋升变量的初始化哟。
示例:
例如上面这段代码,咱们先应用了变量 a
,而后才申明它:
console.log(a);
var a = 1; // 申明并赋值
运行代码后,会输入 undefined
(变量的默认值为 undefined),这阐明关键字 var
会进行变量晋升,然而从输入后果不是 1 能够看出,这仅晋升了变量的申明,没有晋升变量的初始化。
而如果咱们将关键字 var
换成 let
,同样的代码:
console.log(a);
let a = 1;
此时执行代码,会输入 ReferenceError: Cannot access 'a' before initialization
。这阐明应用 let
申明的变量并不会进行变量晋升。
屡次申明一个变量
在应用 var
申明变量的时候,咱们能够同时申明某个变量屡次,然而只有最初一个失效。
而 let
不反对这样做,应用 let
申明变量,一个变量同时只能申明一次,否则会报错。
示例:
例如应用 var
将变量 a
申明 3
次,执行代码后,只有最初一次失效,所以代码的输入后果为 3:
var a = 1;
var a = 2;
var a = 3;
console.log(a);
// 输入:3
而如果应用 let
反复申明一个变量,则会报错,报错信息通知咱们曾经申明过了这个变量:
let a = 1;
let a = 2;
let a = 3;
console.log(a);
// Identifier 'a' has already been declared
const 申明变量
const
与 let
申明变量时统一,如下所示:
const num = 9;
const
也是块级作用域,它与 let
惟一不同在于,const
申明的变量只能在申明时被赋值,之后不能再次被赋值,也就是说通过 const
申明的变量被赋值后不能再扭转。
应用 const
申明变量,不是说被申明的变量的值不能被改变,而是这个变量所指向的那个内存地址不能改变。应用 const
申明数值、字符串、布尔值等数据类型,能够了解为常量,因为这些初始类型的值就保留在变量所指向的那个内存地址。
示例:
例如应用 const
申明不同类型的变量:
const num = 9; // 数字类型
const username = 'xkd'; // 字符串类型
const my = true; // 布尔类型
如果咱们批改这些变量(常量)的值会导致报错:
然而对于数组和对象等复合类型的数据来说,变量所指向的内存地址保留的只是一个指针,const
能够让其指针不变,然而数组元素和对象的属性值能够被批改。
示例:
申明一个对象,而后批改对象中的属性:
从上图咱们能够看出,复合类型的数据,尽管不能间接对曾经申明的变量从新赋值,然而能够通过 对象. 属性
的形式来批改对象的属性值。
咱们在理论应用中,最好尽量应用 let
和 const
来申明变量,缩小 var
的应用。所有变量除了须要批改的都应该应用 const
申明。