开发学院

您的位置:首页>教程>正文

教程正文

​ES6 变量

ES6 变量

  根据定义,变量是存储值的“内存中的命名空间”,换句话说,它充当程序中值的容器,变量名称为标识符。以下是标识符的命名规则:

  标识符不能是关键字。

  标识符可以包含字母和数字。

  标识符不能包含空格和特殊字符,除非下划线( _ )和美元( $)符号除外。

  变量名称不能以数字开头。

类型语法

  必须在使用变量之前声明变量。ES5语法使用var关键字实现相同。声明变量的ES5语法如下。

//Declaration using var keyword 
var  variable_name

  ES6引入了以下变量声明语法:

  使用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只定义了两个作用域( global和local)。

  global-可以从JavaScript代码的任何部分访问具有全局范围的变量。

  local-具有本地范围的变量可以从声明的函数中访问。

示例:全局vs本地变量

  下面的示例通过名称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 outside test() 100

  ES6定义了一个新的变量范围:块范围。

let和块范围

  块范围限制变量对声明它的块的访问。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
let no = 10; 
let no = 20; 
console.log(no);

  在成功执行上述代码时,将显示以下输出。

20

  让我们使用let关键字重新编写相同的代码。

let no = 10; 
let no = 20; 
console.log(no);

  以上代码将抛出一个错误:已声明变量no。使用let关键字声明的任何变量都分配了块范围。

常量

  常量声明创建一个只读引用,它并不意味着它保持的值是不可改变的,只是变量标识符不能被重新分配。常数是块作用域,类似于使用let语句定义的变量。常量的值不能通过重新赋值来改变,它不能被重新声明.

  常量不能重新分配值。

  不能重新声明常数.

  常数需要初始化,这意味着必须在其声明期间初始化常数。

  分配给常量变量的值是可变的。

例子

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();

  注意-提升的概念适用于变量声明,而不是变量初始化。建议始终在其范围的顶部声明变量(全局代码顶部和函数代码顶部),以启用代码解析变量的范围。