js中的闭包问题、call/apply/bind 区别

js中的闭包问题、call/apply/bind 区别

函数中的局部变量当函数执行完成之后,局部变量就会被销毁

垃圾回收机制,将不需要使用数据进行清除,如果不清除就会造成内存泄漏

闭包:

函数套函数,执行外部函数时返回内部函数

并且内部函数有权调用外部函数作用域中局部变量

当引用js文件中变量名相同时,我们把这种叫做变量污染

闭包会产生私有变量的存在,解决变量污染问题

但是也会产生内存泄漏

//   常见闭包
function fn(){
	var a = 1;
    function fn1(){
        a++
    	console.log(a)
    }
return fn1    //返回fn1函数,不执行
}
var f=fn()      
	f()     //   2    执行一次fn1
	f()     //   3    再执行一次

//重构bind()
//外部函数,对obj进行操作,obj加上对应的参数
function fn(a,b){ 	 
   this.a += a; 
   this.b += b;
   return console.log(this.a,this.b)
}
Function.prototype.mybind = mybind;
function mybind(fn,thisArg){         //fn 是需要改变this指向的外部函数,thisArg 是外部函数this的指向
    return function (){
        return fn.apply(thisArg,arguments)
    }
}
var obj = {a:1,b:2}
var  f=mybind(fn,obj)
f(10,10)       // 11 ,12
/*   同上面的等同
function mybind(thisArg){
        var f = this    //把this存起来 ,这里的this指向调用mybind函数的外部函数
        console.log(this)
        return function (){
            return f.apply(thisArg,arguments)
        }
    } 
    var obj = {a:1,b:2}
    var  f=fn.mybind(obj)
    f(10,10)
    console.log(obj)
*/ 

call /apply/bind 区别

call(this指向,参数1,参数2,参数…)

apply(this指向,[参数1,参数2,参数…])

​ call和apply两个方法改变this的指向后原函数会立即执行,而且这个时候知识临时改变this的指向

bind(this指向)(参数1,参数2,…参数n) //返回值是一个function

​ bind改变this指向后不会立即执行,而是返回一个永久改变this指向的函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值