资讯专栏INFORMATION COLUMN

es6中 var let const区别

刘永祥 / 3244人阅读

摘要:我认为这样是可行的主要是通过设置变量的可写属性为报错不报错通过以上两个例子发现这种实现应该是可以的

由一道面试题引发的思考~~如何用es5实现es6中类似const的效果?

var:有变量提升,提升到当前作用域的最前

let:
(1)let不会有变量提升:且let申明的变量在块级作用域中存在暂时性死区 (暂时性死区:在块级作用域中,从块级的顶部到变量申明之前,这一区域是不允许使用该变量的,否则报错,即使是typeof)
(2)全局变量不再属于window对象:在全局let声明的变量不再属于顶层对象(window)
即 let a=1;console.log(window.a)//undefined
(3)let变量不能重复声明,无论是var let 或let let 或let var 都不行的呀~~

const: 声明一个常量,且声明时必须赋值,const特性同let,而且这个常量是不能改变的
注意:如果const常量对应的是一个对象,则不能对常量重新赋值,但是可以改变这个对象的属性~~

例1:const a=1;a=2;//报错
例2:consot aa={};aa=2;//报错        
例3:const aaa={};aaa.b=1;//不报错    

面试题:用es5实现类似const效果。我认为这样是可行的: 主要是通过defineProperty设置变量的可写属性为false
"use strict"; Object.defineProperty(this,"x",{value:1,writeable:false});
this.x=1; //报错
console.log(x);

"use strict";
Object.defineProperty(this,"x",{value:{},writeable:false});
this.x.a=1; //不报错
console.log(x); //{a:1}

通过以上两个例子发现这种实现应该是可以的~~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91964.html

相关文章

  • 总结下varletconst区别

    摘要:前言和的区别是老生常谈,看到网上一些文章的总结,有的不太全面,甚至有的描述不太准确,在这里尽量全面的总结下这三者的区别。最后以上大概是总结后的内容,看来,还是多用吧。 前言 var 和 let 的区别是老生常谈,看到网上一些文章的总结,有的不太全面,甚至有的描述不太准确,在这里尽量全面的总结下这三者的区别。 let 是 ES6新增的变量类型,用来代替 var 的一些缺陷,跟 var...

    pingink 评论0 收藏0
  • var let const 区别

    摘要:区别标签空格分隔规范新增了两种变量声明方式,虽然在项目中也经常用到和但是和到底有什么区别,今天做下总结。不允许重复声明不允许在相同作用域内,重复声明同一个变量。 var let const 区别 标签(空格分隔): ES6 ES6规范新增了let、const两种变量声明方式,虽然在项目中也经常用到let和const但是和var到底有什么区别,今天做下总结。 1、let 声明的变量只在...

    Ververica 评论0 收藏0
  • ES6系列之 letconst

    摘要:声明的变量不得改变值,这意味着,一旦声明变量,就必须立即初始化,不能留到以后赋值。这在语法上,称为暂时性死区,简称。这表明函数内部的变量与循环变量不在同一个作用域,有各自单独的作用域。系列文章系列文章地址 showImg(https://segmentfault.com/img/bVbrjjC); 为什么需要块级作用域 ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合...

    libxd 评论0 收藏0
  • 字面量、变量、常量 let const的理解

    摘要:常量与字面量的区别常量与字面量均不会被改变。常量为存储数据的容器,而字面量为等号右侧的值,字面量是由字符串,数字等构成的字符串或数值。在中,标识符用于命名变量以及关键词函数和标签。 之前竟然对常量、字面量都没有搞清楚,要学习的真的是好的 刚才终于搞清楚了 是该好好在学一遍js的 字面量:在编程语言中,一般固定值称为字面量,如 3.14。 不是一种值,而是一种变量记法 ...

    gplane 评论0 收藏0
  • ES6精解:letconst、块级作用域

    摘要:命令新增了命令,跟类似,都是用来声明变量的不允许重复声明报错不存在变量提升报错正确写法为既要先定义,后面才能有这个值,否则会报错,如果改成会提示未定义,但是就直接报错了暂时性死区只要在块级作用域里面存在则它所声明的变量就绑定在这个块级作用域 let命令 ES6新增了let命令,跟var类似,都是用来声明变量的 1.不允许重复声明 { let a = 1; let a =...

    BWrong 评论0 收藏0

发表评论

0条评论

刘永祥

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<