首页 > 技术文章 > JavaScript中的变量提升和严格模式

art-poet 2019-12-11 18:18 原文

1.什么是变量提升

所谓的变量提升指的是:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体(作用域)的最顶部

    //先声明后使用
    var x;
    console.log(x);// undefined
    //先试用后声明
    console.log(y);// undefined
    var y;
    
    //上面的式子可以写成下面的样子

    变量提升:把x,y提升到顶部
    var x;
    var y;
    console.log(x);
    console.log(y); 

①变量的使用有两种形式,先声明再使用或者先使用后声明;

②无论是哪一种形式都不影响变量的使用,这是因为有变量提升的存在,每一个你定义的变量都会被提升到顶部,也就是函数最开始的部分,这就变成了你在使用变量时其实都已经声明变量了。

 

关于JavaScript变量提升,需要注意的是:只有声明的变量会提升,初始化的不会。

  console.log(c);//undefined
    var c = 111; //初始化的不会提升
    /*
    console.log(c);//underfined
    var c;//声明的会提升
    c = 1;
    */

上面的c打印结果为undefined,这是因为提升的只有声明变量var c,而初始化的c=1没有提升而在使用之后。

为了避免上面出现的变量提升的问题,通常我们在每个作用域开始前声明我们要使用的变量。

 

2.严格模式

严格模式的写法就是在代码编写之前加上"use strict",严格模式要求你不能使用未声明的变量,否则会报错。

 "use strict"; //表示严格模式 
    aa =123;
    console.log(a);//aa is not defined
    //在严格模式下,因为aa未被声明就被使用或者初始化则会报错
 
    var n = 111;
    console.log(n);//111

使用严格模式消除Javascript语法的一些不合理、不严谨之处

推荐阅读