js中的this与闭包

1.this谁调用指向谁,函数内可以通过call apply bind改变

this本是为面向对象设计,所以只有new的过程才会给构造函数绑定this,而var a={}其实是new的简写  所以也绑定了this,除此之外所有的this都指向全局

匿名函数 中this指向全局 箭头函数内没有this所以指向当前环境内,对象内部的函数不要用this,

如 var a={

b:()=》{}

},因为对象环境会被忽略,所以指向全局 ,也是vue中不推荐生命钩子函数使用箭头函数

(为什么vue中生命周期钩子内不能用箭头函数,因为会绑定到全局 严格模式下为undefined)

vue中methods用到settimeOut(()=>{ this指向实例}) 

2.dom.addEventListener('click',function(){})这里的匿名函数this指向dom元素,如果用箭头函数,则会绑定到声明时的作用域

(箭头函数总是指向其声明时的作用域)

关于闭包的应用

1.模拟单例模式

var single=(function(){

var construct=FUNCTION()

var instance=null;

var getinstance=function(){

if(instance)...

}

return getinstance

})

创建私有所用域,只暴露部分方法立即执行函数保证匿名函数只执行一次  无法被再次调用

2.创建私有变量

function count(){

var count =0;

var add=function(){

count++

}

var getcount=function(){

return count

}

return {add,getcount}

}

s=test()

但是执行b=test()

b获取的count不一样

这写例子也可以用构造函数来实现

function(){

var count=0;

this.getcount

}

猜你喜欢

转载自blog.csdn.net/weixin_42176561/article/details/89518208