哪些变量在匿名函数中可用
Which variables are available inside an anonymous function?
关于scope,我一直感到困惑:
this.init = function(){
var t = this;
setTimeout(function(){
// why is t still available here?
t.initgame();
// but not this?
this.initgame();
}, 500);
}
this.initgame = function() {
// yada yada
}
在一个匿名函数内部,作用域与外部不同。但是,在上面的例子中,为什么变量"t"在超时函数中可用,而"this"不起作用呢?
问题是以window
作为作用域调用setTimeout
。
使用专用变量来存储this
(t
)是一种非常有效且常见的解决方案。
在现代浏览器上,bind
有时很方便:
setTimeout((function(){
// use this
}).bind(this), 500);
当匿名函数运行时,它不再作为init
的成员函数运行,而是作为window
的顶级函数运行。因此,this.initgame()
没有任何意义。
例如,在超时函数内运行console.log(this)
返回如下:
Window {top: Window, window: Window, location: Location, external:...
使用var t = this
时,可以将引用指定给当前对象,这样可以工作。
相关文章:
- 访问嵌套函数结构中的JavaScript父函数变量
- Javascript函数变量传递语法问题
- JavaScript 函数变量范围问题
- 在 promise 中获取构造函数变量
- 将函数结果传递给Javascript中的另一个函数变量
- 用对象设置函数变量's值
- Javascript函数变量应生成错误,而不是未定义的错误
- 我可以访问用户脚本中的匿名函数变量吗?
- 在实例化期间使用构造函数变量
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- JavaScript 允许调用函数访问调用函数变量
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 对函数变量的 JavaScript 控制台日志输出感到困惑
- 如何将函数变量传递给主干模型上的 jQuery 事件
- 如何访问构造函数变量
- 实例函数变量不会更改
- 为什么函数变量在变量之后是未定义的
- 用内部函数变量更改外部函数变量?Javascript
- Javascript - 使用闭包递增静态函数变量模拟
- 异步 JavaScript 静态函数变量