以下示例按预期方式工作,并且console.log(this)
返回方法,变量等
function foo() {
console.log(this);
}
foo();
但是,这不是:
export const something = 'anything';
function foo() {
console.log(this);
}
foo();
在这种情况下,conosle.log(this)
未定义。为什么?
答案 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)();