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
}