let a=10 let obj={ b:5, say:function(){ console.log(this.b) } } let func=obj.say let func1=obj.say.bind(obj) func()//undefined 构造函数的方法不能访问到外面的变量,闭包(函数)可以 func1()//5 bind方法将obj作为say的作用域
1 2 3 4 5 6 7 8 9 10 11 12 13
var a=0; //<- (function(){ var a={a:0} //声明对象a的a属性 var b=function(){ setTimeout(()=>{ console.log(this.a) }) } b() //0 此时输出的是变量a b.call(a) //1 对象a的变量a a.a=1//<- a={a:2} })()
1 2 3 4 5 6 7 8 9
alert(a)//function a.... 函数变量提升 a()//10 var a=3//这样不存在变量提升,变量提升是先a=3,再声明var a function a(){ alert(10) } alert(a)//3 a=6//a赋值为一个数值 a()// a is not a function