对JS中变量的浅微认识

355 阅读2分钟

什么是变量?

JavaScript 变量是存储数据值的容器。

变量是由两个部分构成的:
       变量名称,一般来说,赋值符号左边的就是变量。
       变量的值,一般来说,赋值符号右边的就是变量的值。

例如:let a = 1;,其中a就是变量名称1就是变量的值

在JS中,我们是使用关键字var来声明变量的,会有以下几点:

  1. 可以一次性声明一个; 即
var a = 1;
var b = 2;
var c = 3;
  1. 也可以一次性声明多个;即
var a = 1,b = 2,c = 3;
  1. 而且允许重复声明变量,不会出错,即
var a = 1;
var a = 2;
  1. 遗漏声明,即
a = 1;

变量的提升

全局作用域和局部作用域

     全局作用域:整个JS执行环境。

     局部作用域:通过创建一个函数就开辟出了一个局部作用域。

全局变量和局部变量

     全局变量:在全局作用域都可以访问的变量。

     局部变量:只能在当前局部作用域访问的。

var提升

JS代码在执行前会进行预编译,则会进行变量的提升。例如:

console.log(a);
var a = 1;
console.log(a);

输出结果为:undefined;1


执行过程为:

var a;
console.log(a);
a = 1;
console.log(a);

函数的提升

f()
function f(){
    console.log(1);
}

函数被提升了,所以你可以先定义,再使用,输出:1。


为了防止提升,在ES6中提出了关键字letconst

let

与var类似,用来定义变量

let存在以下特点:

  • 块级作用域(第三种作用域)。let所声明的变量,只在let命令所在的代码块内有效。
    例如:
{
    let a = 1;
    let b = 2;
    console.log(b);
}
console.log(a);

此时只会打印出b,不会打印出a;

{}具有划分作用域的能力
例如:

{
    let a = 1;
    let b = 2;
    {
            let a = 10;
            console.log(a,b);
        }
    }
    console.log(a);
    console.log(b);

打印出:

  • let没有“变量提升”现象。
  • 不会成为window对象的属性
  • 暂时性死区(TDZ)

ES6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal deadzone,简称TDZ)说白了,就是要先定义变量,再使用。

const常量

特点:

  • const:声明常量。值不能改变。
  • 必须立即初始化
  • const只在其块级作用域内有效。
  • const也不存在声明提升
  • 也存在暂时性死区