导出内容时函数中的“ this”未定义

时间:2019-05-09 07:03:27

标签: javascript node.js

以下示例按预期方式工作,并且console.log(this)返回方法,变量等

function foo() {
  console.log(this);
}

foo();

但是,这不是:

export const something = 'anything';

function foo() {
  console.log(this);
}

foo();

在这种情况下,conosle.log(this)未定义。为什么?

2 个答案:

答案 0 :(得分:4)

我猜您正在运行没有--experimental-modules标志的第一个示例,但是您正在运行带有 标志的第二个示例。

ESM模块中的代码始终处于严格模式。在严格模式下,如果您不执行任何操作来设置通话过程中的this(您未使用foo();进行设置),则通话中的this将获得值{{ 1}}。但是在宽松模式(有时称为“草率”模式)下,undefined在调用过程中将foo();设置为全局对象。

答案 1 :(得分:0)

如果有帮助的话

function foo() {
  console.log(this);
}

// main script 'this'
foo() 

// execute foo with 'this' set to {foo: 'bar'}
foo.bind({ foo: 'bar '})();

// execute foo with 'this' set to the very function 'foo'
foo.bind(foo)();