ES6中的let和const

ES6中新增了let和const关键字来定义变量:

  • var:ES5和ES6中,在某种意义上可以用来定义全局变量(variable简写)
  • let:定义局部变量,替代let,(同一作用域不允许重复定义)
  • const:定义常量(定义后,不可修改)

1.let:局部变量

        - 变量声明不能重复

let name = 'anna'
let name = 'tom'  //error

        - let有块级作用域

{
    let name = 'anna'
}
console.log('name')//error

                不仅仅针对花括号,例如if()里面

        - 不存在变量提前

console.log(song)   //error
let song='花田错'

        - 不影响作用域链

let school='abc'
function fn(){
    console.log(school) //abc
}
// 全局作用域
var x = 1;
{
    // 局部作用域
    let x = 2;
}
console.log(x); // 1

        此时输出为1,因为let声明的为局部变量,只会在局部作用域内有效,不会影响全局变量x

// 全局作用域
var x = 1;
{
    console.log(x) // Cannot access 'x' before initialization
    // 局部作用域
    let x = 2;
}

 

<script type="text/javascript">
    //循环体
	for(let v = 0;v < 5;v++){
    //在循环体内输出v
        console.log(v);
    }
    //在循环体外输出v
    console.log(v);
</script>

         可以看到在循环体外不能访问循环体内定义的变量。

<script type="text/javascript">
	//在函数外使用let关键字声明变量test_var
    let test_var = "函数外的test_var";
    //定义函数testFun
    function testFun(){
        //打印输出test_var
        console.log(test_var);
        //在函数内使用let关键字声明变量test_var
        let test_var = "函数内的test_var"
        //打印输出test_var
        console.log(test_var);   
    }
    //函数执行
    testFun();
</script>

        这是因为函数内有和全局变量同名的局部变量,会覆盖掉全局变量,但是let关键字声明的变量并没有提升机制,所以会报错。

       -  let声明的变量不会挂在window中,不会造成全局变量的污染

        - 新增了一个块级作用域{},以前只有函数作用域,全局作用域

2.const常量

        - const声明的变量不会挂在window中,不会造成全局变量的污染

        - 声明常量, 一般常量使用大写(潜规则)

const NAME = 'anna'
------
const NAME
NANE = 'anna'  //error

        - const声明和赋值必须一次性完成,并且后期不允许改变存储空间的地址

        - const不允许被修改,不允许改变内存空间的地址

        - const其实可以修改对象(数组)的值,这就说明const不能修改栈里面的数据,但是可以修改堆里面的

const OBJ = {
    name = 'anna'
}
OBJ.name = 'tom'  //引用地址没有改变,改变的只是在堆区中数据的值

        - const是不允许重复声明

        - 不会有声明提前(只是人为看到的效果,实际上是有声明提前,提前临时性的死区中:Cannot access ‘num’ before initialization) 面试点

        - 能使用const就使用const,不能使用就用let。常量的效率比变量要高

        - const具有块级作用域

{
    const pyaler = 'Anna'
}
console.log(player) //error
// 全局作用域
const x = 1;
{
    // 局部作用域
    const x = 2;
}
 console.log(x) // 1
// 全局作用域
const x = 1;
{
    console.log(x) // Uncaught ReferenceError: Cannot access 'x' before initialization
    // 局部作用域
    const x = 2;
}
// 全局作用域
const x = 1;
{
    console.log(x) // Uncaught TypeError: Assignment to constant variable.
    const x = 2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的小熊猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值