Node.js如何在函数中对最外层的变量进行赋值?在参数名与变量名相同的情况下

注意环境,这是一段Node.js后端代码,并非在html中的js代码.
赋值函数存在一个与变量名称相同的参数,如何在不改参数名的情况下进行赋值?

// test.js
var x;// 在最外层定义变量x

init(12)// 调用函数对x进行赋值
console.log(`x:${x}`);// 输出赋值结果

// 函数存在一个与变量名称相同的参数,如何在不改参数名的情况下进行赋值?
function init(x){
    // 注意这是nodejs后端,所以无法使用window.x=x
    x = x;
}

另外还有个疑问,该段代码中的变量x是全局变量还是局域变量?
如果是html中的js代码,x无疑是属于window对象的全局变量.
但是如果是在Node.js的后端环境下,全局对象是global,用户代码并非处于最外层,只有用this.x或var global.x定义的才是全局变量才对.

我的猜想是:
该js文件在Node.js中是一个模块,那x就应该是属于该模块的一个局域变量,和内部函数中定义的局域变量属于作用域链的上下级关系.
global对象作用域->模块对象作用域->函数对象作用域
可是为什么在模块中使用this指向的却是global?

阅读 3.5k
2 个回答

global

nodeglobal 是作为全局变量的宿主 你此处只需 global.x 就可以的
赋值函数存在一个与变量名称相同的参数,如何在不改参数名的情况下进行赋值?

不可能,你得了解什么是作用域。当然如果说window.x/global.x或其他.x我不觉得是个问题。

关于你的猜想

(function(exports, require, module, __filename, __dirname) {
    // 模块源码
});

这不完全个nodejs有关,而是跟module有关,你可以用nodejs命令行试一下,那和browser就很像。

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