TS/JS 箭头函数更改“this”的值
TS/JS arrow function changing value of `this`?
使用 TypeScript v1.7.5,this
的上下文似乎变得混乱,或者可能没有正确翻译。或者我错过了什么。箭头函数内部,this
正在发生变化,当时我预计它仍然引用与函数外部相同的this
。我已经调试了这种情况,结果在下面的评论中指出。
来源 TS
// Debug: "this" is an instance of the class -- good.
FS.exists(dbPath, (exists: boolean) => {
// Debug: "this" is an instance of the global object -- not good.
...
});
生成的 JS (ES5)
FS.exists(dbPath, function (exists) {
...
});
我期待生成的 JS 绑定回调,如下所示:
FS.exists(dbPath, function (exists) {
...
}.bind(this));
我需要在回调中保留this
的值,因此我在整个代码中使用箭头函数。但是我很困惑为什么这似乎无法正常工作。
注意
如果且仅当我特别尝试在箭头函数中使用this
时,则 TypeScript 会创建以下解决方法:
var _this = this;
FS.exists(dbPath, function (exists) {
var _x = this;
});
好吧,很好,但是使用绑定不是更好吗?这仍然不能解决我从箭头函数中调用函数的问题。这些函数调用将丢失this
的上下文,这不是适当的行为。
这看起来像是 Typescript 编译器所需的行为。
ES6 胖箭头函数=>
实际上并不绑定this
.相反,this
实际上落入了上层范围。与 arguments
相同,您不能在胖箭头函数中使用,因为它们会落入上部范围。
因此,根据规范,始终绑定将是不正确的行为。如果您不使用函数内的父作用域,则始终引用this
将是一种不希望的行为。这看起来像是TypeScript编译器的正确优化。
相关文章:
- this内部的值返回this.each(function(){})
- $(this)正在提醒jquery中以前选择的值
- 同一元素的 this.id 值在浏览器之间是不同的
- ember.js计算属性中this的值是如何定义的
- Jquery-使用$(this)获取文本输入的值
- 如何通过循环更改 this.something 的值
- 以下 Javascript 函数如何影响“this”的值
- $(this).val() 返回不正确的值 IE8
- 我们能否在所有javascript方法中定义“this”的值
- 客户端与服务器端 JavaScript 中“this”的值之间的差异
- JS构造函数中“this”的值返回“undefined”
- TS/JS 箭头函数更改“this”的值
- 动态创建的javascript会丢失THIS的值
- 当返回另一个构造函数时,从Javascript构造函数返回this的值
- 如何获取“this”的值关键字
- 从事件处理程序回调调用的函数中' this '的值
- 与函数一起使用时this的值.调用产生意外输出
- 'this'的值是多少?
- 有没有一种方法可以记录JSDoc中“this”的值
- “this”的值是多少?在下面的setTimeout中的一个匿名函数中