猿问

模块变量存储在node.js中的作用域是什么?

模块变量存储在node.js中的作用域是什么?

当我在node.js模块中这样做时:

var abc = '123';

它到哪里去了?我的意思是:在浏览器中window.abc(如果没有在函数中执行或以其他方式执行)

如果我执行这个:

abc = '123';

然后我就能在里面找到它global.abc但这不是我想要的。


翻阅古今
浏览 727回答 3
3回答

函数式编程

与默认将变量分配给全局空间(即窗口)的浏览器不同,节点变量的作用域为模块(文件)。除非你明确把它们分配给模组。事实上,当你跑node myfile.js或require('somefile.js')文件中的代码包装如下:(function (exports, require, module, __filename, __dirname) {      // your code is here});

阿晨1998

所有其他答案都是100%正确的,但我想我应该在Node.js应用程序中添加一个扩展的/确定的范围列表,以防任何人在开始学习Node.js或JavaScript时通过Google发现这一点:全球范围任何声明没有var任何文件中的关键字都可以从节点服务器的同一实例中运行的任何位置访问:// foo.jsbar = 'baz';// qux.jsconsole.log(bar); // prints 'baz'请注意,这被广泛认为是个坏主意,因为它使您的应用程序具有很强的“耦合性”-这意味着您必须打开foo.js才能找到原因。bar = 'baz'在qux.js中模块范围声明的任何内容。var在node.js文件的顶层(而不是在函数或对象或任何其他块内)的关键字位于模块范围,并且可以从同一文件中的任何位置访问,但在其他任何地方都不存在:// foo.jsvar bar = 'baz';console.log(bar); // prints 'baz'// qux.jsconsole.log(bar); // prints 'undefined'功能范围使用var函数中的关键字只能从该函数中访问,而不能从其他任何地方访问:// foo.jsfunction myFunction() {   var bar = 'baz';   console.log(bar); // prints 'baz'}function myOtherFunction() {   console.log(bar); // prints 'undefined'}// qux.jsconsole.log(bar); // prints 'undefined'JavaScript是功能范围..不像其他(块作用域)语言,在函数块中声明的变量可以从父函数中的任何其他地方访问。..例如,这意味着如果在循环中声明一个新变量,那么只要仍然在父函数中,它也可以在该循环之外访问:function myFunction() {   while (thing === true) {   var bar = 'baz';   thing = false;   }   console.log(bar); // prints 'baz'}遮蔽如果您‘重新声明’了一个现有变量,例如使用var关键字,其变量名已被使用,则与该变量名关联的值为在新声明的范围内覆盖:var bar = 'foo';console.log(bar) // prints 'foo'function myFunction() {   var bar = 'baz';   console.log(bar);}myFunction(); // prints 'baz'console.log(bar) // prints 'foo'
随时随地看视频慕课网APP

相关分类

Node.js
我要回答