var与ES6规范中,常量区别是什么

  介绍

这篇文章主要介绍了var与ES6规范中,常量区别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

Js没有块级作用域

请看这样一条规则:在Js函数中的var声明,其作用域是函数体的全部。

,,, (var  i=0; i<10;我+ +){   ,,,,var  a =, & # 39;一个# 39;;   ,,}   console.log才能(a),

明明已经跳的出循环了,却还可以访问的到循环内定义的变量,甚至连我都可以被放访问到,尴尬~

2。* *循环内变量过度共享* *

你可以猜一下当执行以下这段代码时会发生什么

for  (var 小姐:=,0;,小姐:& lt;, 3;,我+ +),{   ,,setTimeout (function  (), {   ,,,console.log(我)   ,,,},1000);   以前,}

在浏览器里运行一下,看看和你预想的结果是否相同?

没错,控制台输出了3个3,而不是预想的0,1,2 .

事实上,这个问题的答案是,循环本身及三次超时回调均共享唯一的变量* *我。当循环结束执行时,我的值为3,所以当第一个超时执行时,调用的我当让也为3了。

话说到这儿,想必客官已经猜到我们是干嘛用的。

你没猜错,就是解决这两个错误的。你尽可以把上述的两个例子中的var替代成让再运行一次。

注意:必须声明& # 39;使用严格# 39;后才能使用让声明变量,否则浏览并不能显示结果

<强>让是更完美的var

让声明的变量拥有块级作用域。也就是说用让声明的变量的作用域只是外层块,而不是整个外层函数报价吧声明仍然保留了提升特性,但不会盲目提升,在示例一中,通过将var替换为让可以快速修复问题,如果你处处使用让进行声明,就不会遇到类似的。

让声明的全局变量不是全局对象的属性。这就意味着,你不可以通过窗户。变量名的方式访问这些变量。它们只存在于一个不可见的块的作用域中,这个块理论上是Web页面中运行的所有JS代码的外层块。

形如为(让x…)的循环在每次迭代时都为x创建新的绑定。

这是一个非常微妙的区别,拿示例二来说,如果一个(让…)的循环执行多次并且循环保持了一个闭包,那么每个闭包将捕捉一个循环变量的不同值作为副本,而不是所有闭包都捕捉循环变量的同一个值。

所以示例二中,也以通过将var替换为让修复bug。

这种情况适用于现有的三种循环方式:的,工党,以及传统的用分号分隔的类C循环。

用让重定义变量会抛出一个语法错误(SyntaxError)。

这个很好理解,用代码说话

let  a =, & # 39;一个# 39;;   let  a =, & # 39; b # 39;;

上述写法是不允许的,浏览器会报错,因为重复定义了。

* *在这些不同之外,让和var几乎很相似了。举个例子,它们都支持使用逗号分隔声明多重变量,它们也都支持解构特性。* *

<强> ES6引入的第三个声明类关键词:const

一句话说明白,const就是用来定义常量的!任何脑洞(范)大(朱)开(刘)的写法都是非法的

比如这样:

//只声明变量不赋值   const    这样://重复声明变量   const  a =, & # 39;一个# 39;;   const  a =, & # 39; b # 39;;

还有这样:

//给变量重新赋值   const  a =, & # 39;一个# 39;;   时间=a  & # 39; b # 39;

再来个黑科技:

//不过不推荐这么干,实在没啥意思,常量常量,不变的才叫常量嘛~   const  a =,{: & # 39;一个# 39;};//重新赋值当然是行不通的了   a =, {: & # 39; b # 39;};//嘿嘿嘿科技=a.a  & # 39; b # 39;

const确实没啥说的,普通用户使用完全没问题,高(窦)端(bi)用户咋用都是问题。

感谢你能够认真阅读完这篇文章,希望小编分享的“var与ES6规范中,常量区别是什么”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

var与ES6规范中,常量区别是什么