JavaScript中的变量提升和严格模式

Posted 艺术诗人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的变量提升和严格模式相关的知识,希望对你有一定的参考价值。

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语法的一些不合理、不严谨之处

以上是关于JavaScript中的变量提升和严格模式的主要内容,如果未能解决你的问题,请参考以下文章

javaScript中的严格模式 (译)

javascript的严格模式和正常模式

详解前端变量提升

js面试中长见的算法题(转载)

javascript变量提升详解

js中的严格模式和非严格模式的比较