Javascript 全球背景和;这";在Node.js中
下面的JS代码执行一个匿名函数,并定义一个函数met(),使其在全局上下文中可见: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上也运
(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中运行它,或者它是否未包装在某个外部闭包中