web API学习笔记

call() 和apply() 作用: 可以改变this的指向

 function f1(x, y) {
        console.log(x+y, this)
    }
var obj = {
        age:10,
        sex:"男"
    }
    //f1.apply(obj, [10,20]);// 改变了f1的指向, 把f1的this指向到了obj
    f1.call(obj, 10,20);// 改变了f1的指向, 把f1的this指向到了obj

    function Person(name, sex) {
        this.name = name;
        this.sex = sex;
    }
    Person.prototype.eat = function () {
        console.log(this)
    }
    var per = new Person("小明", "女");
    per.eat()

    function Son(name, sex) {
        Person.call(this, name, sex)
    }

    var son = new Son("小小明", "男")
    console.log(son.name, son.sex)

    //把人吃方法的指向变成儿子的身上
    per.eat.call(son)

02.bind()方法

总结:
假如使用一个函数需要改变this指向值, 用call, apply, bind
fn.call(需要指向的对象, 参数1, 参数2…) 参数不多的时候用
fn.apply(需要指向的对象, [参数1, 参数2…]) 参数很多的时候用
假设你要生成一个新的函数, 并且想绑定在某个函数对象上使用, 就可以使用bind()
var newFn = fn.bind(需要指向的对象, 参数1, 参数2…)
调用 newFn();

作用域系列

   //全局变量
    // if(true){
    //     var num = 10
    // }
    // console.log(num);
    //
    // while (true){
    //     var num2 = 100;
    //     break;
    // }
    // console.log(num2);
    //
    // //局部变量
    // function f1() {
    //     var num3 = 1000;
    // }
    //console.log(num3)

    //作用域链--->变量的使用是从里到外搜索的,
   // var num = 10;
   //  function f1() {
   //      //var num = 100;
   //      function f2() {
   //         // var num = 1000;
   //          console.log(num)
   //      }
   //      f2()
   //  }
   //  f1();

    //变量的声明的提前
    console.log(num);
    var num = 10;

    //函数的声明提前了
    ff();
    function ff() {
        console.log("呵呵")
    }

    //函数的表达式
   // fff();
   var fff =  function() {
        console.log("呵呵")
    }

闭包

闭包的概念: 函数a中, 有一个函数b, 而这个函数b中可以访问函数a中的变量,此时就形成了闭包即 闭包就是能够读取其他函数内部的变量
闭包就是函数内部和函数外部链接起来的桥梁
闭包的作用: 缓存数据, 延长作用域链
闭包的优点: 缓存数据,  也是缺点
    // function f1() {
    //     var num = 100;
    //     function f2() {
    //         console.log(num);
    //     }
    //     f2()
    // }
    // f1();

    function f1() {
        var num = 100;
        num++;
        return num;
    }

    var ff = f1()
    console.log(ff);//101
    console.log(ff);//101
    console.log(ff);//101

    function f2() {
        var num = 100;
        return function () {
            num++;
            return num;
        }
    }
    var fff = f2();
    console.log(fff());// 101
    console.log(fff());// 102
    console.log(fff());// 103

沙箱

    //沙箱: 虚拟环境. 小黑盒子.在虚拟的环境中模拟真实的世界, 去做实验, 实验结果和真实世界是一样的, 但是不会影响真实世界


    //  ---> 这就是沙箱--->小环境
    ((function () {
        var num = 10;
    })());

    var num = 100;// 不会互相影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值