gpt4 book ai didi

typescript - 是否应该创建一个名为 _this 的变量与此冲突?

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:00 25 4
gpt4 key购买 nike

这是一个非常人为的例子,但假设我们在类函数的某处创建了一个变量 _this

class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}

当我们调用 changeName 函数时,这不会像预期的那样工作,因为编译代码的相关部分如下所示:

var _this = this;
var _this = {};
(function () {
_this.name = name;
})();

这是糟糕的 Javascript:我们有两个 var 声明互相覆盖。编译器创建的 _this 正在被我的 _this 覆盖。

据我所知,TypeScript 规范中并未指定此行为。

为什么他们会发生冲突?编译器无法检测我是否创建了一个名为 _this 的变量并将自动生成的变量命名为其他名称,例如 _this2 以防止我的变量和编译器生成的变量互相践踏?

最佳答案

编译器将自动创建 _this 作为对 this 的引用,以方便将使用 lambda 语法创建的闭包。我很确定我在某个地方的 TypeScript 规范中读到了这个,但我同意编译器在这种情况下应该发出错误。

我不喜欢编译器改变它发出 javascript 的方式的想法,因为这与生成“惯用的”(因此可预测的)javascript 的既定目标相冲突。

关于typescript - 是否应该创建一个名为 _this 的变量与此冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12710303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com