为了账号安全,请及时绑定邮箱和手机立即绑定

函数作为参数的this问题

既然setOutTime(cb,1000)中的cb里面的this是指window,也就是说cb是在global中被调用的,那它为什么能访问到_self变量呢? _self变量不在全局作用域中。

正在回答

1 回答

函数作用域是由定义函数时决定的。

简单的说就是函数的作用域就是你写函数时函数是如何嵌套的,作用域就是如何嵌套的。

例如:

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指向。


2 回复 有任何疑惑可以回复我~
#1

大将S 提问者

非常感谢!
2016-04-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
React入门
  • 参与学习       122141    人
  • 解答问题       121    个

颠覆式前端UI开发框架React入门视频教程,赶紧学起来

进入课程

函数作为参数的this问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信