Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs全局函数_Javascript_Node.js - Fatal编程技术网

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=…
…将其更改为just
echo=function echo(){}
会导致它进入严格模式