开发手册 欢迎您!
软件开发者资料库

ES6 - 变量

ES6变量 - 从简单和简单的步骤学习ES6,从基本到高级概念,包括概述,环境,语法,变量,运算符,决策,循环,函数,事件,Cookie,页面重定向,对话框,空字键,页面打印,对象,数字,布尔,字符串,新字符串方法,数组,日期,数学,RegExp,HTML DOM,集合,类,承诺,模块,错误处理,验证,动画,多媒体,调试,图像映射,浏览器。

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

  • 标识符不能是关键字.

  • 标识符可以包含字母和数字.

  • 标识符不能包含空格和特殊字符,但下划线(_)和美元除外($)签名.

  • 变量名称不能以数字开头.

类型语法

必须在使用变量之前声明变量. 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会自动处理它.此功能称为动态类型.

JavaScriptVariable Scope

变量的范围是程序的区域在其中定义.传统上,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() 10value 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

const 声明创建一个读取 - 只引用一个值.它并不意味着它拥有的值是不可变的,只是不能重新赋值变量标识符.常量是块范围的,非常类似于使用let语句定义的变量.常量的值不能通过重新赋值而改变,并且不能重新声明.

以下规则适用于使用 const声明的变量 keyword :

  • 不能为常量重新赋值.

  • 无法重新声明常量.

  • 常量需要初始值设定项.这意味着常量必须在声明期间初始化.

  • 分配给 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();

成功执行上述代码后会显示以下输出.

01234x can be accessed outside the block scope x value is :5x 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();

注意 : 提升的概念适用于变量声明但不适用于变量初始化.建议始终在其作用域的顶部(全局代码的顶部和函数代码的顶部)声明变量,以使代码能够解析变量的作用域.