函数作为参数的this问题
既然setOutTime(cb,1000)中的cb里面的this是指window,也就是说cb是在global中被调用的,那它为什么能访问到_self变量呢? _self变量不在全局作用域中。
既然setOutTime(cb,1000)中的cb里面的this是指window,也就是说cb是在global中被调用的,那它为什么能访问到_self变量呢? _self变量不在全局作用域中。
2016-04-01
函数作用域是由定义函数时决定的。
简单的说就是函数的作用域就是你写函数时函数是如何嵌套的,作用域就是如何嵌套的。
例如:
function a (){
var x = 1;
function b (){ // 这个的b函数可以访问a函数里面的变量。 也就是函数书写时的嵌套关系决定了作用域关系。
var y = 2;
console.log(x) // 1
}
console.log(y) // undefined y是在b函数中声明的,a是b的外层不能访问。
}
容易混淆的地方是 this 。
记住一点就可以了,this是一个JS中的关键字,和变量没有半毛钱关系。也就是说他不具有变量作用域的特性。
他有单独的特性。
1.作为普通函数调用的时候,他指向全局对象。 不管这个函数是否被嵌套。例子中的b函数,他的this是不会指向a()的,而是指向全局对象。
2.作为构造函数,这个没什么好说的。老师讲的很清楚。
3.作为对象的方法,那么肯定指向方法所属的对象了。
4.通过call apply bind 这些函数其实也就是修改函数中this的指向。
这里的 _self是一个变量,保持了上级作用域中的this。
或者用老师的第二个方法bind修改cb中的this指向。
举报