当前位置: 首页 > 新闻中心 > 10月31日堤顶道路工程施工简报

10月31日堤顶道路工程施工简报


  1. 用let声明的变量不会提升
  2. var、function、let、const变量提升
  3. js中let和var定义变量的区别

一、用let声明的变量不会提升

用let声明的变量是不会提升的。

这种变量提升机制在开发时会给我们造成很多的困扰,ecmascript 6引入了let声明,用法与var相同,不过用let声明的变量不会被提升,可以把变量的作用域限制在当前代码块中。

使用let声明变量,还可以防止变量的重复声明。例如在某个作用域下已经存在某个标识符,此时再使用let关键字声明它,就会抛出错误。同一作用域下,不能使用let重复定义已经存在的标识符,但如果在不同的作用域下,则是可以的。

let简介

let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。下面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。

如果使用let,声明的变量仅在块级作用域内有效,最后输出的是6。因为变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。

以上内容参考自百度百科-ecmascript 6

二、var、function、let、const变量提升

我是从这两篇文章的阅读中,做出了自己的总结,如果不明白的话可以看看这两篇文章:

变量提升情况:

变量提升概念:

js引擎在执行过程中变量的生命周期分为三个阶段: 注册、初始化、赋值

var、funciton、let、const的生命周期:

var 在注册阶段初始化是一起的,会被赋值为 undefined ,所以变量提升,打印出的是 undefined

function 在注册阶段初始化、执行都一起了,所以函数不管写在哪里都可以直接调用

let 在注册阶段和初始化是解耦的,只是创建了但是并未初始化,所以出现了暂时性死区,打印出的是 'x is not defined'

const 的生命周期与let一样,只不过没有赋值阶段

三、js中let和var定义变量的区别

1、区别:

var定义的变量是全局变量或者函数变量。

let定义的变量是块级的变量。