Let ,const、var的区别、call, apply,bind的区别 ---(附带案例)

一、Let ,const、var的区别

相同点: 都是用来定义变量的

不同点:
1)、声明提升:var会声明提升,let和const不会
2)、let和const必须先定义后使用,不具备声明提升,不能重复定义

    // 提前调用 预解析
    console.log(int1);//undefined
    // // 提前调用 结果是报错
    console.log(int2);
    // var 定义的变量 
    var int1 = 100;
    let int2 = 200;
    
//2. 不能重复定义    
    // var 定义的变量 
    var int1 = 100;
    let int2 = 200;
    // 变量名称重复 重复赋值效果
    var int1 = '北京';
    console.log(int1);

    // 变量名称重复 结果是报错
    let int2 = '上海'

3)、块级作用域

  // 在 {} 中 使用 let 定义变量 只能在 { } 中 使用
    // 如果需要在 { } 中 对 let 定义的变量 进行操作 
    // 提前定义 变量 在 {} 中 进行赋值操作
    if (true) {
        var a = 300;
        let b = 400;
        // let 声明的变量 在 { } 中可以调用
        // 对 {} 外定义的变量 进行赋值操作
        console.log(b);
    }

    console.log("a", a);//300

    // let 声明的变量 在 { } 外 不能调用 
    console.log("b", b);//报错

4)、暂时性死区:var没有,let和const有
6)、const定义的变量是常量,必须赋初始值而且不可修改,变量名一般大写

  // const 定义的变量 不能重复赋值
     const c = 100 ;
     c = 200 ;
    // 结果是报错

    const NUM = [1, 2, 3, 4, 5];
    // 赋值的是地址,可以修改元素
    NUM[0] = '哈哈';//只是修改引用数据类型中,存储的数据
    console.log(NUM);// ['哈哈', 2, 3, 4, 5]
    //不能重新再赋地址,会报错
   // NUM = [2];
    //console.log(NUM);

二、call, apply,bind的区别

相同点: 三个函数都会改变this的指向

不同点:

1)、bind会产生新的函数,产生新的函数,新的函数里的this就是绑定对象。

2)、call和apply不会产生新的函数,只是在调用时,绑定一下而已。

3)、call和apply的区别:
第一个参数都是要绑定的this,apply第二个参数是数组(是函数的所有参数,可以接收父函数的arguments)。
call第二个参数朝后的所有参数是原函数的参数(把apply第二个参数展开)

//call和apply 1、改变this指向。2、调用函数本身;3、第一个参数都是对象(this的指向)
    var fn01 = function(){
        console.log("fn01的this",this);
    }
    fn01();
    let  obj1 = {
        id:"01001"
    }
    fn01.call(obj1);//调用fn01的同时,让fn01内部的this是obj1

    // bind:作用:1、改变this指向(把函数和对象绑死),2、产生新的函数,新的函数里的this就是绑定对象,不会调用原函数;
  let obj2 = {
        id: "01005"
    }

    let newFn05 = (function () {
        console.log("匿名函数使用bind里的this", this);
    }).bind(obj5);

    newFn05();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值