在Coffeescript.org上:
bawbag = (x, y) ->
z = (x * y)
bawbag(5, 10)
将编译为:
var bawbag;
bawbag = function(x, y) {
var z;
return (z = (x * y));
};
bawbag(5, 10);
通过在node.js下的coffee-script进行编译可以做到:
(function() {
var bawbag;
bawbag = function(x, y) {
var z;
return (z = (x * y));
};
bawbag(5, 10);
}).call(this);
文件说:
如果要创建供其他脚本使用的顶级变量,请将它们作为属性附加到窗口或CommonJS中的exports对象上。如果您同时针对CommonJS和浏览器,那么存在运算符(见下文)为您提供了一种可靠的方法来确定将它们添加到何处:root
= exports?这个
然后如何在CoffeeScript中定义全局变量。“将它们作为窗口的属性附加”是什么意思?
由于coffee脚本没有var
语句,因此它会自动将其插入coffee脚本中的所有变量,这样可以防止已编译的JavaScript版本将所有内容泄漏到
全局命名空间中 。
因此,由于没有办法故意从咖啡脚本方面使某些内容“泄漏”到 全局名称空间中 ,因此您需要将全局变量定义为 全局对象的 属性。
将它们作为属性附加在窗口上
这意味着您需要执行类似之类的操作window.foo = 'baz';
来处理浏览器的情况,因为那里的 全局对象 是window
。
在Node.js中没有window
对象,而是有一个exports
对象传递给包装Node.js模块的包装器,因此在Node.js中,您需要做的是exports.foo= 'baz';
。
现在,让我们看看它在您的文档中的报价中指出的内容:
…针对CommonJS和浏览器:root = exports?这个
显然,这是咖啡脚本,因此让我们看一下它实际编译成的内容:
var root;
root = (typeof exports !== "undefined" && exports !== null) ? exports : this;
首先,它将检查是否exports
已定义,因为尝试在JavaScript中引用不存在的变量会否则产生SyntaxError(与结合使用时除外typeof
)
因此,如果exports
存在(在Node.js(或写得不好的WebSite
…)中),则根目录将指向exports
,否则指向this
。那是this
什么
(function() {...}).call(this);
使用.call
上的功能将绑定this
功能里面第一个参数传递,在浏览器的情况下,this
现在会是window
对象,在Node.js的的情况下,这将是
全球范围内 它也可作为global
对象。
但是,由于您require
在Node.js中具有该函数,因此无需global
在Node.js中为该对象分配某些内容,而是您可以分配给该exports
对象,然后该对象将由require
函数返回。
经过所有这些解释之后,您需要html" target="_blank">执行以下操作:
root = exports ? this
root.foo = -> 'Hello World'
这将foo
在全局名称空间中声明我们的函数(无论发生什么情况)。
就这样 :)
我用global.d.ts定义全局变量: 但是在执行main.ts的时候 报错:
我的文件中有这段代码,在这里我可以简单地使用。 现在,我需要使用socket从各种文件发出事件,而不想连接此
问题内容: 是否可以在JavaScript函数中定义全局变量? 我想在其他函数中使用变量(在函数中声明)。 问题答案: 是的,正如其他人所说的,您可以在全局范围内(在所有函数之外)使用声明全局变量: 或者,您可以在上分配一个属性: …因为在浏览器中,用声明的 所有全局变量 都是对象的属性。(在最新规范ECMAScript 2015中,全局范围内的new ,和语句创建的不是全局对象属性的全局变量;这
问题内容: 有没有一种方法可以将一个函数定义为在一个类中是全局的(或者,实际上是在另一个函数中)?类似于定义全局变量。 问题答案: 将函数添加到当前名称空间,就像将添加任何其他名称一样。这意味着您可以在函数或方法中使用关键字: 同样适用于类主体或方法: 区别将在导入时执行顶级类主体时立即定义。 像您的所有用途一样,您可能想重新思考问题并找到另一种解决方法。例如,您可以 返回 如此创建的函数。 演示
我准备我的API文档的方式是每只手做一次,而不是自动生成。我有应该发送到所有API的头,不知道是否可以为整个API全局定义参数? 这些头中有些是静态的,有些必须在调用API时设置,但它们在所有API中都是相同的,我不想为每个API和每个方法复制和粘贴参数,因为这在将来是不可维护的。 我看到了API定义的静态头,但没有一个文档说明如何设置或使用它们。 这到底有没有可能?
我正在为全局窗口对象指定一个属性,但当我运行eslint时,我得到以下结果: “窗口”未定义 我在eslint文档中看到了这一点: 下面将窗口定义为不应该触发正在测试的规则的代码的全局变量: 我曾尝试将类似的内容添加到package.json文件中,以使eslint allow“window”作为全局变量,但我一定是做错了什么。从文档来看,我可能需要在一个单独的文件中执行类似的操作,但是有没有办法