Javascript Nodejs全局函数
我有一个非常基本的函数,看起来像这样,它在一个名为Javascript Nodejs全局函数,javascript,node.js,Javascript,Node.js,我有一个非常基本的函数,看起来像这样,它在一个名为functions.js的文件中 function echo(input){ process.stdout.write(echo); } 当我添加文件并调用echo()时,如下所示: 主文件: require("functions.js"); require("another_file.js"); 另一个文件.js echo("hello!"); 它给了我以下错误: ReferenceError: echo is not defin
functions.js的文件中
function echo(input){
process.stdout.write(echo);
}
当我添加文件并调用echo()
时,如下所示:
主文件:
require("functions.js");
require("another_file.js");
另一个文件.js
echo("hello!");
它给了我以下错误:
ReferenceError: echo is not defined
有没有一种方法可以让我创建一个全局函数,而不必使用导出
?内部函数.js
您可以访问节点的全局
变量,它类似于浏览器中的窗口
变量。正如柏拉图在一篇评论中所建议的,您可以通过简单地执行echo=function echo(input){…}
将其添加到全局。但是,如果您使用的是strict模式,这将抛出一个错误,该模式旨在捕获常见错误(例如意外创建全局变量)
安全地将echo
添加为全局变量的一种方法是将其添加到全局global
变量中
"use strict";
global.echo = function echo(input) {
process.stdout.write(input);
}
我认为通常使用exports
是更好的做法,因为否则一旦functions.js
被包含(从任何其他文件中),您就可以访问每个文件中的echo
,并且很难找到它的来源
为此,您需要使functions.js
看起来更像:
"use strict";
module.exports.echo = function echo(input) {
process.stdout.write(input);
}
然后在主脚本中执行以下操作:
"use strict";
var functions = require("./functions.js");
functions.echo("Hello, World");
尝试echo=function echo(input){…}
@Plato:最好通过执行global.echo=…
来明确。分配给未初始化的变量是一个错误(在严格模式下),您不需要该IEFE,节点已经有一个全局global
变量。它甚至可能根本不起作用,因为模块范围中的这个不是全局对象iirc.Oops!你说得对-这个
不是全局的
也不是模块
。现在编辑我的答案之前应该做一些测试。还发现“使用严格”;如果只执行echo=…
操作,并且没有将其设置为全局(我比节点更熟悉浏览器环境),则不会导致它抛出错误。编辑答案以反映等待,echo=…
不会在严格模式下抛出?那么一定有一个声明的地方。古怪的编辑:我已经在node中测试过了,它确实抛出了。@bergi,啊,看起来我说的是function echo(){};echo=…
…将其更改为justecho=function echo(){}
会导致它进入严格模式