js中的变量提高和函数提高

从上周开始,我所在的学习小组正式开始了angular的学习,angular是全面支持es6的,因此语法上和之前的angular有了很大的不一样,好比变量声明时就抛弃了var,而选择了let和const;记得刚开始学习js的时候,使用webstrom时用var,webstrom会在下面画一条小绿线,表示这个用法,问题不大,可是有点问题。由于webstrom推荐使用最新的标准,以后问过学长,他说这是es6的语法,暂时不用管,防止浏览器不兼容。html

终于,如今到了学习es6的时候。es6

const与let

const就是定义一个常量,即一个没法改变的量。web

而let是一个更完善的var,之前的var是不完善的,他定义的变量是以函数为范围,而不是正常编程语言中的以一个大括号为范围,好比:编程

function() {

  for(var i=0;i<10;i++){
          var a = 'a';
    }

    console.log(a);  // a
}

打印a时仍然会打印'a',如果一个没接触过js的人确定会大吃一惊,这就是一个最简单的变量提高的例子。而let就解决了这个问题。它定义的变量就是块级的。浏览器

变量提高与函数提高

上面已经说了一个变量提高的最简单的例子,下面介绍一下为何:编程语言

一般JS引擎会在正式执行以前先进行一次预编译,在这个过程当中,首先将变量声明及函数声明提高至当前做用域的顶端,而后进行接下来的处理

下面来讲说函数提高,一样的,让咱们先看个例子:函数

function hoistFunction() {
    foo(); // output: I am hoisted

    function foo() {
        console.log('I am hoisted');
    }
}

hoistFunction();

函数能够在声明以前就能够调用,这是由于引擎是把函数声明整个地提高到了当前做用域的顶部,预编译以后的大概代码以下:学习

function hoistFunction() {
    function foo() {
        console.log('I am hoisted');
    }

    foo(); // output: I am hoisted
}

hoistFunction();

总结

变量提高和函数提高能够远比上面那个例子复杂,但对咱们意义并不大,毕竟对于变量已经有了完善的let定义方法,而函数提高,在能不用的状况最好不用,毕竟他是不规范的,学习这个,只是为了之后看到相关代码时可以看懂,不然,看这种代码时确定一脸懵逼。
(另外说一句,函数提高是专门设计的,有其特殊用途,而变量提高纯粹是设计语言时的失误,但二者都应该少用,毕竟都不规范,想要详细了解,能够点这里设计

相关文章
相关标签/搜索