变量
根据定义, variable是存储值的“存储器中的命名空间”。 换句话说,它充当程序中值的容器。 变量名称称为identifiers 。 以下是标识符的命名规则 -
标识符不能是关键字。
标识符可以包含字母和数字。
标识符不能包含空格和特殊字符,但下划线(_)和美元($)符号除外。
变量名称不能以数字开头。
键入语法
必须在使用变量之前声明变量。 ES5语法使用var关键字来实现相同的功能。 用于声明变量的ES5语法如下。
//Declaration using var keyword
var variable_name
ES6引入了以下变量声明语法 -
- 使用let。
- 使用const。
Variable initialization是指在变量中存储值的过程。 变量可以在声明时或在稍后的时间点初始化。
用于声明和初始化变量的传统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会自动处理它。 此功能称为dynamic typing 。
JavaScriptVariable Scope
变量的范围是程序中定义它的区域。 传统上,JavaScript只定义了两个范围 - 全局和本地。
Global Scope - 可以从JavaScript代码的任何部分访问具有全局范围的变量。
Local Scope - 具有Local Scope的变量可以在声明它的函数中访问。
示例:全局变量与局部变量
以下示例通过名称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关键字在块中重新声明它。 当在内部块外部访问变量时,将打印本地作用域变量的值,而在内部块中引用块作用域变量。
Note - 严格模式是一种选择加入受限制的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变量的值是不可变的。
例子 (Example)
const x = 10
x = 12 // will result in an error!!
上面的代码将返回一个错误,因为常量不能重新赋值。 常量变量是不可变的。
ES6和可变Hoisting
用var声明的变量的范围是它的当前执行上下文,它是封闭函数,或者对于在任何函数外部声明的变量,global。 变量提升允许在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();
Note - 提升的概念适用于变量声明但不适用于变量初始化。 建议始终在其作用域的顶部(全局代码的顶部和函数代码的顶部)声明变量,以启用代码来解析变量的作用域。