让常量与变量的区别是什么

介绍

本篇内容主要讲解“让常量与变量的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“让常量与变量的区别是什么”吧!

<节>

es6里面的一些新特性还是很好用的,但是有的时候看文档会带来一些疑惑报价吧,const这两个东西和var到底有哪些不同呢?下面咱们结合一些小例子给大家展示一下。

首先来了解一下让与var的区别,主要有一下三点:

第一点,var在javascript中是支持预解析的,而让不支持预解析,代码如图:

让常量与变量的区别是什么

执行结果如图:

让常量与变量的区别是什么

结果未报的错,下面将var换成让,代码如下:

让常量与变量的区别是什么

执行结果:

让常量与变量的区别是什么

错误提示为:未捕获ReferenceError:没有定义,翻译成中文大概意思就是一个未定义。这与定义是不同的,未定义的是未赋值,但已经定义了。

第二点:var可以重复定义同一个变量,但是让不可以,看代码:

让常量与变量的区别是什么

执行结果如图:

让常量与变量的区别是什么

结果没有报的错,将var换成让:

让常量与变量的区别是什么

执行结果为:

让常量与变量的区别是什么

错误信息为:未捕获SyntaxError:标识符& # 39;一个# 39;has already been declared。翻译为中文,意思是a已经被定义。

第三点:let可以形成块级作用域,在es6之前javascript只有函数作用域,没有块级作用域。那在es6之前我们是怎么实现块级作用域的呢?有朋友已经猜到了,立即执行函数表达式,简称IIFF。看代码:

let const 与var的区别是什么

执行结果为:

let const 与var的区别是什么

可以看到通过一个立即执行函数表达式,我们实现了一个局部作用域或者块级作用域,但是有了let之后就不需要写这样的代码了,代码修改如下。

let const 与var的区别是什么

执行结果:

let const 与var的区别是什么

可以看到两者实现的效果是一样的。

下面看一道经典面试题:

let const 与var的区别是什么

说出以上代码的执行结果,并解释其原理。将其改造为,依次输出0,1,2,3,4

首先上面的代码执行结果为:每隔200ms依次打印5,一共打印5次。

结果为什么是这样的呢?这里面涉及里javascript里面的两个知识点,作用域和定时器setTimeout回调函数异步执行。这段代码用var声明了一个全局变量i,循环执行完成之后,i变为5,此时javascript主线程空闲,异步回调队列中的函数依次被eventloop放进主线程执行,因为此时的i已经变为了5,所以打印了5次5。

以上便是这道题目的前两点的解析。那第三点,该如何改造代码呢?

明白了原理就好改造了,既然定时器的回调函数中的i每次都是从全局作用域中取值,能不能在循环的时候将其放到局部作用域中呢,当然可以看代码:

let const 与var的区别是什么

执行结果为:

let const 与var的区别是什么

那这些和let有什么关系呢?回忆一下let和var的第三点不同,let可以生成局部作用域,代码再次改造:

让常量与变量的区别是什么