函数的进阶

一、this的指向
1.普通函数 :function fn(){}
fn();
this指向window

2.对象的方法 :var o ={ sayhai:function(){}}
o.sathai;
this指向对象o

3.构造函数 :function Start(){}
new Star();
this指向实例对象

4.绑定事件 btn.onclick = function(){}
点击调用
this指向绑定按钮

5.定时器:setinterval(function(){},1000)
每个1秒调用一次
this指向window

6.立即执行:(function(){})()
this指向window

二、call、apply、bind
1.call
1.调用函数
2.可以改变this指向 fn.call(o) 这时候this指向o
3.call可以实现继承 ,其实就是修改this的指向

2.apply
1.也是调用函数,也是可以改变函数内部的this指向
2.可以传递数组或者是伪数组
3.主要应用 :利用apply借助math内置对象对对象求最大值

3.bind
1.不会调用函数
2.可以改变内部的this值
3.返回的是改变this的新函数
4.应用于因为不会立即执行但是有想改变this,就选择bind

总结
call和apply最大区别 传递参数不同
bind和其他两个不同点是不会调用函数
call常用:继承
apply常用:和数组有关
bind常用:不调用函数,还行改变this 常用与setinterval定时器

三、闭包 (closure)
含义: 一个作用域有权访问另一个函数作用域中的变量的一个函数
简单的说就是一个作用域有权访问另外一个函数内部的局部变量
闭包一般就是返回一个高级函数 立即执行函数有时候可以看成闭包

//lis[i]里面使用的i是外面传进来的 使用了闭包
 for( var i =0; i <lis.length ; i++){
        (function(i){
            setInterval(() => {
                console.log(lis[i].innerHTML);
            }, 3000);
        })(i)
    }

function fn(){
            var num = 10;
            function fun(){
                console.log(num);
            }
            //  fun可以访问fn的num  产生了闭包 */
            return fun;
        }

闭包的主要作用优点:延伸了变量的作用范围
闭包的缺点:局部变量一直存在,只有调用了才释放,造成内存泄漏;

五、递归
含义:一个函数在内部可以调用其本身,简单来说就是函数内自己调用自己,这个函数就叫递归函数
递归函数作用和循环效果一样
由于递归很容易案发时栈溢出错误,所以必须加退出条件return

  var num = 0;
        function  fn(){
            console.log('我要打印6句话');
            if(num ==6){
                return;
            }
            num++;
            fn();
        }
        fn();

使用递归求阶乘

 function fn(n){
            if (n ==1){
                return 1;
            }
            return n*(n-1);
        }
        console.log(fn(10));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值