💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# TypeScript 变量 – `var`,`let`和`const` > 原文: [https://howtodoinjava.com/typescript/var-let-const/](https://howtodoinjava.com/typescript/var-let-const/) 在原始 JavaScript 中,变量是使用“`var`”关键字声明的。 现在,在 ES6 中,您还可以使用`let`和`const`关键字定义变量。 这三个关键字都具有用于变量声明和初始化的标准语法,但是它们的范围和用法不同。 让我们了解这三个关键字之间的区别。 ## `var`关键字 关键字`var`具有传统的变量定义语法。 (可选)您可以使用值初始化变量。 如果您没有在`var`语句中初始化变量,则会自动为其分配 JavaScript 值`undefined`。 ```java var value ; //value is 'undefined' var data = 100; //initialized with number 100 var blogName = 'howtodoinjava.com'; //initialized with string value ``` #### 1)范围 * 用`var`关键字声明的变量具有**函数范围**(即声明它们的函数内部的全局范围); 这意味着它们可以被共享同一作用域的任何函数访问。 ```java function fun() { var dataX = 10; //Globally available inside function fun() if(true) { var dataY = 20; //Globally available inside function fun() console.log(dataX); //Output 10 console.log(dataY); //Output 20 } console.log(dataX); //Output 10 console.log(dataY); //Output 20 } fun(); console.log(dataX); //Not available outside function; dataX is undefined console.log(dataY); //Not available outside function; dataY is undefined ``` * 可以在声明或初始化变量之前使用它们。 在这种情况下,它们的值为`undefined`,但不会出现任何运行时错误。 ```java function fun() { console.log(dataX); //Output 'undefined' var dataX = 10; } fun(); ``` #### 2)`var`声明的提升 请注意,用`var`关键字声明的变量将被提升。 提升意味着,如果我们在函数末尾声明一个变量(已声明但未初始化),则运行时会将其提升到顶部,并且如果在声明之前使用该变量,则不会有任何错误。 > 阅读更多: [JavaScript 提升](https://howtodoinjava.com/typescript/javascript-variable-hoisting/) #### 3)如果您不使用“`var`”关键字 在 JavaScript 中,如果不使用`var`关键字进行变量声明(*隐式声明*),则会在全局范围内创建变量。 例如: ```java for(index=0; index< array.length; index++){ //index is in global scope //code } ``` 在`for`循环上方,将在全局范围内创建一个名为`index`的变量。 如果其他人碰巧也在使用全局`index`变量,那么您刚刚覆盖了他们的变量。 为避免赋予变量全局范围,必须在变量声明中使用`var`关键字。 ## `let`关键字 `let`关键字与`var`关键字非常相似 – 范围界定上有更多限制。 1. 当“作用域必须限制在声明它的块中”时,使用“`let`”语句声明一个变量。 ```java function fun() { let dataX = 10; if(true) { let dataY = 20; console.log(dataX); //Output 10 console.log(dataY); //Output 20 } console.log(dataX); //Output 10 console.log(dataY); //dataY is 'undefined' } fun(); ``` 参见上面突出显示的行。 如果您使用了“`var`”关键字,则由于`dataY`在函数中具有全局作用域,因此该名称已经可用。 由于`let`关键字,`dataY`在`if`块之外不可见。 2. 使用`let`声明的变量不能在声明之前使用,否则将导致错误。 ```java function fun() { console.log(x); //Output 'undefined' console.log(y); //Error - "Uncaught ReferenceError: y is not defined" var x = 10; let y = 11; } fun(); ``` ## `const`关键字 1. `const`声明一个具有常量值的块范围变量。 它基本上是带有“`var`”关键字的变量声明,其中变量值是常量,不能更改。 2. `const`遵循与`let`关键字相同的作用域原则。 3. 如果您知道所声明的变量不能且不应被允许重新分配,则使用`const`对其进行声明,否则请使用`let`关键字。 #### 语法和用法 ```java const PI = "3.14"; PI = 12; //Uncaught TypeError: Assignment to constant variable. ``` 将我的问题放在评论部分。 学习愉快!