如果我保存下面的行并运行像./node saved.js
var that = this;
that.val1 = 109;
var f1 = function(){return this;}
var f2 = function(){return this;}
var that1 = f1();
var that2 = f2();
console.log(that1.val1)//undefined
that1.val2=111;
console.log(that2.val2)//111
我得到了这个结果
undefined
111
但是,如果我将它粘贴到已经启动的shell ./node,我会得到
...
...
> console.log(that1.val1)//undefined
109
undefined
> that1.val2=111;
111
> console.log(that2.val2)//111
111
为什么第一个console.log的输出不同?
答案 0 :(得分:1)
当您在脚本中运行它时,函数内部的this
指的是与函数外部不同的对象。例如,我将此更改发送到脚本的开头:
var that = this;
console.log(this)
that.val1 = 109;
var f1 = function(){console.log(this); console.log("eq: " + (this === that));return this;}
当第二行执行时将其作为node test.js
运行时,我得到一个空对象,然后f1
内的那个被执行更深的几行,这是一个非常不同的对象。
当从Node REPL运行时,我得到的对象与两个地方f1
版本中node test.js
内的对象匹配。因此,that.va1 = 109
在两种情况下对不同的对象起作用,这就是你看到差异的原因。
编辑:请参阅Jonathan Lonowski关于2个不同对象的问题的评论。