Node执行js文件关于this的输出问题?

a.js文件如下

'use strict'

// node js运行代码
var msg;
msg='a'


console.log(msg)

console.log(module)

console.log(this) //输出空对象

function f2(){
    console.log(this)// 输出结果未确定
}

new  f2() // f2中的this是一个空对象,表示当前创建的对象,log 输出{}
f2()// 输出undefine,

node a.js 执行a.js文件
问题:

  1. 为什么 console.log(this) 会输出 输出空对象
  2. 在模块中,顶层this关键字返回undefined 而不是windows。如何理解这句话
  3. 为什么 f2()输出 输出undefine,

求指点

阅读 1.3k
2 个回答

首先 NodeJS 环境并没有 Window 这个对象。
在浏览器中直接输入 console.log(this) 则会打印 Window

然后构造函数中,this指向 new 出来的那个新的对象。
最后在函数中,this 永远指向最后调用他的那个对象。

所以最后为什么为输出 undefined 其实就是没有调用的那个对象。
如果你改写成下面这样,就会输出调用它的 test 对象了。

function f2(){
    console.log(this)
}

var test = { fn: fn }
test.fn()
// { f2: [Function: f2] }
头像
this
    132
    广西崇左市扶绥县

    new调用一个函数发生了这些事:
    (1)新建一个对象instance=new Object();
    (2)设置原型链instance.__proto__=F.prototype;
    (3)让F中的this指向instance,执行F的函数体。
    (4)判断F的返回值类型:如果是值类型,就丢弃它,还是返回instance。如果是引用类型,就返回这个引用类型的对象,替换掉instance。

    撰写回答
    你尚未登录,登录后可以
    • 和开发者交流问题的细节
    • 关注并接收问题和回答的更新提醒
    • 参与内容的编辑和改进,让解决方法与时俱进
    推荐问题