Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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 全球背景和;这";在Node.js中_Javascript_Node.js - Fatal编程技术网

Javascript 全球背景和;这";在Node.js中

Javascript 全球背景和;这";在Node.js中,javascript,node.js,Javascript,Node.js,下面的JS代码执行一个匿名函数,并定义一个函数met(),使其在全局上下文中可见: (function(GLOB){ GLOB.met = function(s) { console.log(s); } })(this); met("Hi!"); 在浏览器中运行时,工作正常,并在控制台上显示“Hi!”。 但是,在Node.js中运行时,最后一行抛出错误“met未定义” 现在更改中的最后一行时: this.met("Hi!"); 它在Node.js上也运

下面的JS代码执行一个匿名函数,并定义一个函数met(),使其在全局上下文中可见:

(function(GLOB){

    GLOB.met = function(s) {
        console.log(s);
    }

})(this);


met("Hi!");
在浏览器中运行时,工作正常,并在控制台上显示“Hi!”。 但是,在Node.js中运行时,最后一行抛出错误“met未定义”

现在更改中的最后一行时:

this.met("Hi!");
它在Node.js上也运行良好

为什么第一个版本不能在Node上工作?

“这”在NodeJ的外部范围中不是全局的。而是使用global.varName

最好的做法是使用GLOBAL.VAR_名称,这样您就知道不要经常这样做


如果你想与浏览器保持一致,我建议使用browserify,因为它可以让你在客户端使用global,还可以要求甚至合并你的js!只有我的两分钱。

这并不符合这样一个事实,即编写this===global在全局范围内返回true……那么,browserify将替换客户端的require.js?这是一个被广泛接受且稳定的工具吗?是的,像雅虎这样的公司在行业中使用browserify。正如我所说的,它是通过合并所有文件来实现的,因此,如果您需要每个页面的唯一文件或其他内容,它并不理想,但可以进行配置。我的大多数项目都是带有路由器的SPA,所以我使用合并的CSS包和browserify包,然后在页面加载期间只有两个同步调用。(虽然我已经做了一些其他的魔术来自动包含CSS库的一部分等等,如果你想得到最好的效果,你可以在脚本标签和样式标签中转储代码,这样你的整个页面就可以加载到一个文件中!)这个代码示例在全局范围内对我来说很好。。。检查是否在全局范围内而不是模块1中运行它,或者它是否未包装在某个外部闭包中