当前位置: 首页 > Web前端 > HTML

TypeScript使用let和const声明变量

时间:2023-04-02 22:24:05 HTML

使用let声明变量关键字let是ES6的新特性。它似乎解决了var变量声明中的一些问题。let声明变量的语法与var非常相似,例如:leta=1;事实上,let和var的关键区别不在于语法,而在于语义。块级作用域(也称为词法作用域)在let中引入。块作用域是什么意思?我们知道,用大括号{}把代码括起来,就可以称为代码块。比如if、for等语句的执行代码是用大括号{}括起来的吧?大括号是代码块。如果我们用let关键字在花括号内声明一个变量,那么变量的作用域就只在花括号内,不能在花括号外使用。这是块级范围。所以这也是let和var的区别。如果在函数中的if语句中也声明了一个变量,则var声明的变量作用域是在整个函数中,而let声明的变量作用域只是在if语句中。.例子:我们可以看到如下一段代码,在函数myFunc中使用let声明了一个变量a,在if语句中声明了一个变量b:functionmyFunc(){leta=10;如果(a>5){让b=a;返回b;}returnb;}根据我们上面提到的块级作用域,我们可以知道变量a的作用域是在整个myFunc()函数中,而变量b的作用域是在if语句块中,变量a可以在函数内部使用,但是如果我们在if语句之外使用变量b,就会出错。下图是VSCode编辑器提示我们的错误信息:现在我们应该明白什么是块级作用域了。如果你还不知道,那就自己试试吧。变量提升当我们用关键字var声明变量时就会发生变量提升,而用关键字let声明变量可以帮助我们解决这个问题。variablepromotion是什么意思,就是变量可以先用后声明,也就是可以先使用再声明变量。但要注意,变量提升只是改进声明,而不是变量的初始化。示例:例如,在下面的代码中,我们在声明变量a之前使用它:console.log(a);vara=1;//声明并赋值后运行代码,会输出undefined(变量默认值为undefined),也就是说关键字var会进行变量提升,但是从输出结果可以看出不为1,这只会促进变量的声明,不会促进变量的初始化。如果我们用let替换关键字var,同样的代码:console.log(a);leta=1;此时执行代码,会输出ReferenceError:Cannotaccess'a'beforeinitialization。这意味着用let声明的变量不会被提升。多次声明一个变量在使用var声明一个变量时,我们可以同时多次声明一个变量,但只有最后一次生效。但是let不支持这个。使用let声明变量。一个变量一次只能声明一次,否则会报错。例子:比如用var声明变量a3次。代码执行后,只有最后一个生效,所以代码的输出为3:vara=1;vara=2;vara=3;console.log(a);//Output:3如果你用let重复声明一个变量,会报错,错误信息告诉我们这个变量已经被声明过了:leta=1;leta=2;leta=3;console.log(a);//标识符'a'已经被声明const声明变量const与let声明变量一致,如下所示:constnum=9;const也是块级作用域,它和let唯一的区别是const声明的变量只能在声明的时候赋值,之后不能再赋值,也就是说const声明的变量分配后不能更改。使用const声明变量并不是说声明的变量的值不能改变,而是变量指向的内存地址不能改变。使用const声明数值、字符串、布尔值等数据类型,可以理解为常量,因为这些初始类型的值都存放在变量指向的内存地址中。例子:比如声明不同类型的变量使用const:constnum=9;//数字类型constusername='xkd';//字符串类型constmy=true;//boolean类型如果我们修改该值会报错:但是对于数组、对象等复杂类型的数据,变量指向的内存地址只存储了一个指针。const可以保持指针不变,但是可以修改数组元素和对象的属性值。示例:声明一个对象,然后修改对象中的属性:从上图我们可以看出复合类型的数据虽然不能直接对声明的变量重新赋值,但是可以通过object的方法修改对象的属性。适当的价值。在实际使用中,最好尽量使用let和const来声明变量,减少var的使用。除需要修改的变量外,所有变量都应声明为const。