Javascript YDKJS-如何';这';工作

Javascript YDKJS-如何';这';工作,javascript,node.js,this,Javascript,Node.js,This,我从中复制了代码,并且作者期望的输出是“oops global”,但是当我在节点中运行这个时,我得到了“undefined”。为什么? function foo() { console.log(this.a); } var obj = { a: 2, foo: foo }; var bar = obj.foo; // function reference/alias! var a = "oops, global"; // `a` also property on global

我从中复制了代码,并且作者期望的输出是“oops global”,但是当我在节点中运行这个时,我得到了“undefined”。为什么?

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

var obj = {
  a: 2,
  foo: foo
};

var bar = obj.foo; // function reference/alias!

var a = "oops, global"; // `a` also property on global object

bar(); // "oops, global"

以正常方式在节点中运行代码时:

node implicitLost.js 重要原因:

在模块中运行时,由于
var a=“oops,globals”在模块范围内,它仅在该模块内定义;它并没有成为一个全球性的问题。因此,
foo
中的
this.a
,试图访问全局对象上的
a
,却看不到它

下面是在全局范围内运行的代码:

函数foo(){
console.log(this.a);
}
var obj={
答:2,,
福:福
};
var bar=obj.foo;//函数引用/别名!
var a=“oops,global”//`全局对象上的`属性

bar();//“oops,global”
我没有对代码进行任何编辑,而是复制并保存为implicitLost.js,在终端中以“node implicitLost.js”的形式运行,并以“undefined”的形式输出,感谢您添加了如何运行它的信息,Ramesh;这一切都不同!:-)(我把它编辑成了问题。)它很有效……非常感谢! node < implicitLost.js