ES 6 变量
根据定义,变量指的是存储值即“存储器中的命名空间”。换句话说,它充当程序中值的容器。变量名称称为标识符,以下是标识符的命名规则
- 标识符不能是关键字。
- 标识符可以包含字母和数字。
- 标识符不能包含空格和特殊字符,但下划线(_)和美元($)符号除外。
- 变量名称不能以数字开头。
类型语法
必须在使用变量之前声明变量。ES5语法使用var关键字来实现相同的功能。用于声明变量的ES5语法如下所示。
//Declaration using var keyword var variable_name;
ES 6 中引入了以下变量声明语法
- 使用let
- 使用const
变量初始化指在变量中存储值的过程。变量可以在声明时初始化,也可以在稍后的时间点初始化。
声明和初始化变量的传统ES5类型语法如下所示:
//Declaration using var keyword var variable_name = value;
示例:使用变量
var name = "Tom"; console.log("The value in the variable is: "+name);
上面的示例声明一个变量并打印它的值
成功执行时将显示以下输出
The value in the variable is Tom
JavaScript与动态类型
JavaScript是一种非类型化的语言。这意味着JavaScript变量可以保存任何数据类型的值。与许多其他语言不同,您不必在变量声明期间告诉JavaScript变量的值类型。变量的值类型可以在程序执行过程中更改,而JavaScript会自动处理它。这个特征被称为动态类型
JavaScript变量作用域
变量的作用域是程序中定义变量的区域。传统上,JavaScript只定义两个作用域:全局范围和局部范围。
- 全局范围:具有全局范围的变量可以从JavaScript代码的任何部分访问。
- 局部范围:具有局部范围的变量可以从声明它的函数中访问
示例:全局变量与局部变量
以下示例通过num声明两个变量-,一个在函数外部(全局范围),另一个在函数内(本地范围)。
var num = 10; function test() { var num = 100; console.log("value of num in test() "+num) }; console.log("value of num outside test() "+num); test();
函数中引用的变量显示局部范围变量的值。但是,在函数外部访问时,变量num将返回全局范围的实例。
成功执行后会显示以下输出。
value of num outside test() 10 value of num in test() 100
为了解决上述问题,ES6定义了一个新的变量范围-块作用域。
块作用域
块作用域限制变量对声明它的块的访问。该var关键字为变量分配函数范围。与var关键字不同,let关键字允许脚本将对变量的访问限制在最近的封闭块上
"use strict" function test() { var num = 100 ; console.log("value of num in test() "+num) { console.log("Inner Block begins") ; let num = 200 ; console.log("value of num : "+num) ; } } test()
该脚本在函数的局部范围内声明变量num,并使用let关键字在块中重新声明它。在内部块外部访问变量时,将打印本地作用域变量的值,而在内部块中引用块作用域变量。
注:严格模式是选择使用受限制的JavaScript变体的一种方式。
成功执行后会显示以下输出
value of num in test() 100 Inner Block begins value of num : 200
示例:let v / s var
var no = 10; var no = 20; console.log(no);
成功执行上述代码后,将显示以下输出。
20
让我们使用let关键字重写相同的代码。
let no = 10; let no = 20; console.log(no);
上面的代码会抛出一个错误:标识符‘no’已经声明了。使用let关键字声明的任何变量都分配块作用域。
常量(const)
该常量声明创建了一个只读的值。它并不意味着它所定义的值是不可变的,只是不能重新赋值变量标识符。常量是块范围的,类似于使用let语句定义的变量。常量的值不能通过重新赋值而改变,并且不能重新声明。
对于使用const关键字声明的变量,以下规则适用
- 常量不能重新赋值。
- 常量不能重新声明。
- 常量需要初始化程序。这意味着必须在声明期间初始化常量。
- 赋给const变量的值是不可变的。
例
const x = 10 ; x = 12; // will result in an error!!
上面的代码将返回一个错误,因为常量不能重新赋值。常量变量是不可变的。
ES6中的变量提升
用var声明的变量的范围是它的当前执行上下文,它是封闭函数,或者在函数外部声明的变量是全局的。变量提升允许在JavaScript程序中使用变量,甚至在声明它之前。
下面的示例更好地解释了这个概念。
示例:变量提升
var main = function() { for(var x = 0;x<5;x++) { console.log(x); } console.log("x can be accessed outside the block scope x value is :"+x); console.log('x is hoisted to the function scope'); } main();
在成功执行上述代码时,将显示以下输出。
0 1 2 3 4 x can be accessed outside the block scope x value is :5 x is hoisted to the function scope
JavaScript引擎在内部脚本表示为
var main = function() { var x; // x is hoisted to function scope for( x = 0;x<5;x++) { console.log(x); } console.log("x can be accessed outside the block scope x value is :"+x); console.log('x is hoisted to the function scope'); } main();
注意:提升的概念适用于变量声明,而不是变量初始化。建议始终在变量作用域的顶部(全局代码的顶部和函数代码的顶部)声明变量,以使代码解析变量的作用域。