浅谈一下ES6的提升

简介: es6的提升在es6之前,我们定义定义变量的时候,只能使用var关键字来定变量,这样有一个问题,var定义的变量会成为全局变量。

es6的提升

在es6之前,我们定义定义变量的时候,只能使用var关键字来定变量,这样有一个问题,var定义的变量会成为全局变量。

但是在我们实际开发的过程中,我们应该尽量少的将变量或者函数暴露在全局作用域下,这是一种好的软件设计原则。

为了解决var的变量泄露问题,es6引入了let和const关键字。

什么是提升

提升就是变量或者函数在定义之前就可以使用,这是因为js引擎在编译的时候,会将变量和函数的声明提升到作用域的顶部。

注意这里我们讲到了函数与变量都存在提升的现象:

变量提升

console.log(a); // undefined
    var a = 1;
复制代码

在这里并不会出现ReferenceError的错误,因为js引擎在编译的时候,会将变量的声明提升到作用域的顶部,所以在这里我们可以使用变量a,但是值为undefined。

也就是说,变量提升只会提升变量的声明,而不会提升变量的赋值。

变量提升,提升的变量的声明,而变量的运行逻辑还是停留在原地。

那么es6新增的let和const关键字,是否也存在变量提升呢?

我认为是会提升的,但是:由于let与const暂时性死区的问题,导致在变量声明之前使用变量会报错。这里看法不统一,有人认为会提升,有人认为不会提升

console.log(a); // ReferenceError: a is not defined
    let a = 1;
复制代码

函数提升

console.log(a); // function a() {}
    function a() {};
复制代码

这里注意:我们上面这段代码里面书写的是函数声明,而不是函数表达式。

这点很重要,因为在函数提升中,只有函数声明才会被提升,函数表达式是不会被提升的。

其实很好理解,这就像变量提升相似,提升的只是函数的声明,而不会提升函数的赋值。

console.log(a); // TypeError
    var a = function() {};
复制代码

其实上面的代码就类似于下面的样子:

var a;
    console.log(a); // TypeError
    a = function() {};
复制代码

函数提升优先

要是函数和变量提升两者同时存在的时候,谁会更先提升呢?

console.log(a); // function a() {}
    var a = 1;
    function a() {};
复制代码

到这里答案就很明显了,函数优先。

总结

不管是函数还是变量,被提升的只有声明,并没有赋值。

注意

  • 函数提升优先
  • 函数只会提升函数声明,不会提升函数表达式


相关文章
|
3月前
|
JSON JavaScript 前端开发
浅谈ES5与ES6
浅谈ES5与ES6
48 3
ES6(二)
es6相关知识
74 0
|
JavaScript 前端开发 索引
ES9,ES10
ES9,ES10
76 0
|
网络架构 索引
ES6(一)
- 使用let,声明的变量仅在块级作用域内有效 - var命令声明的,在全局范围内都有效 - const声明一个只读的常量。一旦声明,常量的值就不能改变。 - const的作用域与let命令相同:只在声明所在的块级作用域内有效。 - let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。 - let不允许在相同作用域内,重复声明同一个变量。 - 什么时候用 let,什么使用用 const——如果不知道用什么的时候,就用 const
59 0
ES6 Day02
ES6 Day02
66 0
|
前端开发 JavaScript API
ES6-day03
ES6-day03
66 0
|
JSON 资源调度 JavaScript
ES6 Day01
ES6 Day01
88 0
|
前端开发 Java 网络架构
ES6(总结)
ES6(总结)
76 0
|
前端开发 JavaScript 网络架构
除了ES6,ES还有那些必须要懂得知识?
Includes 方法用来检测数组中是否包含某个元素,返回布尔类型值。
112 0
除了ES6,ES还有那些必须要懂得知识?
|
前端开发 JavaScript 网络架构
一篇文章带你学会整个ES6
ES 全称 EcmaScript,是脚本语言的 规范 ,而平时经常编写的 JavaScript ,是 EcmsScript 的 一种实现 ,所以 ES 新特性其实是指 JavaScript 的新特性 。
106 0

热门文章

最新文章