var,let,const三种变量声明之间的区别

声明变量时,我们会用到var,let和const,那么这三者之间到底有何区别,今天就将我所学分享给大家,希望能给大家有所帮助

1、使用var变量时,变量会被自动添加到最接近的上下文。

如果变量未经声明就被初始化了,那么他就会被添加到全局上下文。

//var添加到最近的上下文,即在add函数内部

function add(num1, num2) {
   var sum=num1 + num2;
    return sum;
}
let result = add(10,20); //30
console.log(sum);  //报错:sum在这里不是有效变量


//未经过声明就被初始化,则被添加到全局上下文中
function add(num1, num2) {
    sum=num1 + num2;
    return sum;
}
let result = add(10,20); //30
console.log(sum);  //30

var声明会被拿到函数或全局作用域的顶部。

function fn1() {
    var name = 'jake';
}

//等价于
function fn2() {
    var name;
    name = 'jake';
}

2、ES6新增的let关键字跟var很相似,但它的作用域是块级的,块级作用域由最近的一对包含花括号{ }界定。

if(true) {
    let a;
}
console.log(a);  //ReferenceError:a 没有定义,因为只在{ }内部有作用

3、var和let不同之处:

a: 重复的var声明会被忽略,重复的let声明会抛出SyntaxError

var a;
var a;
//不会报错

{
    let b;
    let b;
}
//SyntaxError: 标识符b已经声明过了

b: let的行为非常适合在循环中声明迭代变量。使用var声明的迭代变量会泄漏到循环外部(注意:var对于for和if语句没有作用域,但是对于函数有作用域。),这种应该避免。

for(var i=0; i<10; i++){ }
console.log(i);   //10


for(let i=0; i<10; i++){ }
console.log(i);   //ReferenceError: j 没有定义

4: ES6中还增加了const关键字。 1:使用const定义表示符,必须进行赋值。2:一经声明,在其生命周期的任何时候都不能再重新赋予新值。   3:常量的含义是指向的对象不能修改,但是可以改变对象内部的属性。

const a;  //SyntaxError: 常量声明时没有初始化

const b=3;
console.log(b);  //3


//修改对象内部的属性,因为obj指向的是对象地址,地址不修改,但是对象中的属性可以修改
const obj = {
    name :"Heli";
    age:18;
}

obj.name = "Bela";
obj.age = 17;  

建议:在ES6开发中,优先使用const,只有需要改变某一个标识符的时候才使用let。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值