Javascript 为什么这是未定义的(使用babel)

Javascript 为什么这是未定义的(使用babel),javascript,babeljs,Javascript,Babeljs,我是一个使用javascript的新手,我有这个问题 今生 (function () { this.something = "something"; // error - this is undefined let loader = PIXI.loader; loader.add('ace', "assets/spritesData.json"); loader.on('complete', onAssetsLoaded); loader.load(); fun

我是一个使用javascript的新手,我有这个问题

今生

(function () {

this.something = "something"; // error - this is undefined 

let loader = PIXI.loader;
    loader.add('ace', "assets/spritesData.json");
    loader.on('complete', onAssetsLoaded);
    loader.load();


function onAssetsLoaded(){
    this.gameSettings = GameSettings.getInstance();

    createrenderer();
    let rootView = new RootView(this._stage),
        rootController = new RootController(rootView,this.gameSettings);

    animate();
}
})();
为什么“这个”没有定义?从我现在知道的“this”现在应该是函数的当前范围(在本例中是anon函数)


提前谢谢你的帮助

详细的解释可以在中找到。相关部分(据我所知,在公认的答案中未提及)是:

当我们使用严格模式时,
在全局函数和未绑定到任何对象的匿名函数中保存
未定义的


详细的解释可以在中找到。相关部分(据我所知,在公认的答案中未提及)是:

当我们使用严格模式时,
在全局函数和未绑定到任何对象的匿名函数中保存
未定义的


通常指调用对象,但您的函数是匿名的,直接调用。以下是创建新上下文的方法:

  • new
    关键字将创建一个新的
    this
    上下文并返回它

    function Constructor() { this.property = "a"; };
    let instance = new Constructor();
    // instance.property is now "a"
    
  • function.bind({})
    将包装函数,因此当调用函数时,
    将引用
    {}
    function.apply的工作原理与此类似,但会立即调用函数并要求您指定参数

  • 对于高级用户:


通常指调用对象,但您的函数是匿名的,直接调用。以下是创建新上下文的方法:

  • new
    关键字将创建一个新的
    this
    上下文并返回它

    function Constructor() { this.property = "a"; };
    let instance = new Constructor();
    // instance.property is now "a"
    
  • function.bind({})
    将包装函数,因此当调用函数时,
    将引用
    {}
    function.apply的工作原理与此类似,但会立即调用函数并要求您指定参数

  • 对于高级用户:


我不确定它为什么会抛出该错误,但仅供参考-
将引用代码中的全局上下文(例如
窗口
),而不是函数上下文(您需要使用
新建…
实例化使其引用函数)@RobM.-它将在非严格模式下保存全局上下文,但巴贝尔总是在严格模式下运行。对。谢谢你的回答:)我不知道它为什么会抛出这个错误,但是仅供参考-
这个
将引用你代码中的全局上下文(例如
窗口
),而不是函数上下文(你需要使用
新建…
实例化使它引用函数)@RobM。-它将在非严格模式下保存全局上下文,但巴贝尔总是在严格模式下运行。对。谢谢你的回答:)