var let const的区别和变量提升

var
var声明的变量可进行变量提升,let和const不会
var可以重复声明
var在非函数作用域中定义是挂在到window上的
let
let声明的变量只在局部起作用
let防止变量污染
不可在声明
const
const声明的变量只在局部起作用
const防止变量污染
不可在声明
不可被改变
如果使用const声明的是对象的话,是可以修改对象里面的值的。也就是说:只要对象指向的地址不被修改,就是允许的。在这里插入图片描述

关于let和const有几个小tips:

1.let 关键词声明的变量不具备变量提升;
2.let 和 const 声明只在最靠近的一个块中有效;
3.当使用常量 const 声明时,请使用大写变量,如:CAPITAL_CASING;
4.const 在声明时必须被赋值,否则会报错。
5.使用let会出现暂时性死区,原因是let所声明的变量会锁在它所在的作用域里,不允许访问,就是说,它也会先扫描一遍,把let声明的变量保存起来,但是不允许使用,这时候你访问a,由于此作用域中有a,就不用访问外面的a了,但是你不能在它声明之前访问它。
6. 使用let和const时不能重复声明。
7. 使用var声明的全局变量或者未声明的变量都会归属到window对象下,但是使用let和const声明全局变量时不会发生这种情况。

拓展: 如何使用ES5标准来实现let,换言之就是如何实现块级作用域。(答:使用匿名函数)

变量提升:只提升变量,不提升值

var a='Hello World';
(function(){
    alert(a);
})()

经过运行之后,弹出“Hello World”。
继续往下:

var a='Hello World';
(function(){
    alert(a);
    var a='I love you';
})()

运行结果是 undefined,这就是JavaScript中的变量提升(Hoisting)。
根据变量提升以及js的作用域(块级作用域)的分析,得知 上面代码真正变成如下:

var a='Hello World';
(function(){
    var a;
    alert(a);
    a='I love you';
})()

所以在写js code 的时候,我们需要把变量放在函数级作用域的顶端,比如我在下面所举的例子:var a,b,c;。以防止出现意外。

(function(){
    var a,b,c;
    a='One';
    b='Two';
    c='Three';
})()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值