变量声明关键字var、let、const

变量声明关键字var、let、const

举例

  1. var a = 10;直接声明赋值

  2. var a;
    a=10;先声明后使用

  3. b = 10;
    var b;//先试用后定义,声明会提升到作用于最前面

  4. c = 10;//直接赋值,直接变为顶层对象的属性,在node中顶层对象为global

  5. let a = 10;//有块作用域限制,不能重复声明,声明不会自动提升。

  6. const a = 10;//可以用来声明常量,指向的是基本类型则类似常量,指向对象则类似常指针。和let一样也有块级别作用域。

注意事项

1.var 这种定义可以重复定义,不会报错

var a=10;
var a = {};
这样的定义也会存在被覆盖的问题
var a = 10;
for( var a = 2; a > 0; a-- ){
    console.log(a)
}
//循环后a的值为0
var a = 10;
{
    var a = 20;
}
console.log(a);
//输入结果为20

2.let不允许重复声明变量包括之前用var声明过的。

var a = 10;
let a;//报错
let b;
let b;//报错
因为let有块级别作用域,所以不会像var被覆盖。
let a = 10;
for( let a = 1; a < 2; a++){
    console.log(a);
}
console.log(a);//a=10

let b = 10;
{
    let b = 20;
}
console.log(b);//b=10;
但是使用let需要注意,let声明的变量不会自动提升,在let的作用域内未定义先使用会出ReferenceError
{
    d = 10;
    let d; //报错,d没有定义
}
在没有let的代码中使用typeof a,如果a是未定义的则表达式会返回undefined,但是如果是使用了let的代码块中,typeof a,a未定义则会抛出ReferenceError,即使块之外已经定义了a。

3.const和let类似,只不过const定义的是常量,声明时赋值,声明时不赋值会产生语法错误。Const声明的变量只是变量本身是只读的。

这里写图片描述
这里写图片描述
可以使用const foo = Object.freeze({});方式把对象变为只读。

特别指出:
* 允许在块级作用域内声明函数。
* 函数声明类似于var,即会提升到全局作用域或函数作用域的头部。
* 同时,函数声明还会提升到所在的块级作用域的头部。
注意,上面三条规则只对ES6的浏览器实现有效,其他环境的实现不用遵守,还是将块级作用域的函数声明当作let处理。
考虑到环境导致的行为差异太大,应该避免在块级作用域内声明函数。如果确实需要,也应该写成函数表达式,而不是函数声明语句。如let func = function(){}这种形式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值