这在箭头函数中是未定义的

IT技术 javascript this undefined arrow-functions
2021-03-08 21:31:14

我试图在我的箭头函数中访问它:

import myObject from '../myObjectPath';
export const myClass = Fluxxor.createStore({
    initialize() {
        this.list = [];
        this.id = null;
    },
    myOutsideFunction(variable1) {
        // here this in NOT undefined
        myObject.getMyList(this.id, (myList) => {
            // here this in undefined
            this.list = myList;
        } 
    });
)};

但是在箭头函数中,在 ma 回调函数中这是未定义的!!

我正在使用 babel 来转译代码:

myOutsideFunction: function myOutsideFunction() {
    var _this = this;
    myObject.getMyList(function (myList) {
        _this.list = myList;
    });
},
1个回答

如果thisundefined一个箭头函数中,它的箭头的不确定之外也是如此。箭头函数只是捕获this周围范围的。

在这种情况下,您将声明myOutsideFunction为对象文字上的方法,并且永远不会绑定它或执行任何其他将对象作为 调用它的事情this

调试时,请记住转译器可以重命名变量(并且必须重命名this才能正确捕获)。undefined即使原始值不是,在没有包含重命名的源映射的控制台中使用原始名称也会向您显示确保在监视或控制台命令中使用转换后的名称。

@oliv37 严格来说,这是不可能的。箭头函数是一种语言功能,将始终收到相同的this. 我不知道任何有错误的运行时(因为它是箭头函数的基础)。
2021-04-18 21:31:14
奇怪的原因是它写// here this in NOT undefined在函数调用之前,所以this不应该在箭头函数中未定义
2021-04-26 21:31:14
@Besat 您是否通过转译器或类似的东西(babel、webpack 等)运行此代码?如果是这样,你能包括输出吗?编译器可能正在更改某些变量名称,使其在您的控制台中显示为未定义,但这仅仅是因为您引用了原始(预编译)名称。
2021-04-26 21:31:14
@Besat babel 将不得不重命名,this因为真实名称是保留的,通常使用_this代替。
2021-04-30 21:31:14
反正我是这样!!应该是不可能的!但是我已经测试了几次并且我在箭头函数中得到了未定义但是在调用它之前它不是未定义的
2021-05-10 21:31:14