主干和下划线在浏览器和nodejs中都可用。
他们使用以下模式:
(function(){
// The top-level namespace. All public Backbone classes and modules will
// be attached to this. Exported for both CommonJS and the browser.
var Backbone;
if (typeof exports !== 'undefined') {
Backbone = exports;
} else {
Backbone = this.Backbone = {};
}
// ...
})();
这是实现这一目标的最佳方法吗?
答案 0 :(得分:2)
“最佳”?嗯,这是一个主观的事情;这当然是一个好方法。
你遗漏的一点非常重要的是该函数应该使用this
作为对全局上下文的引用 - 针对浏览器的代码会调用“window”:
(function() {
var global = this; // like "window"
这样,代码就可以“导出”符号:
global.Foo = someFunction;
另一个类似的技巧是这样做:
(function(global) {
// ...
})(this);
这几乎有同样的效果。
答案 1 :(得分:0)
使用ECMAScript 5严格模式(以及未来版本的JavaScript),只有Pointy的版本可以使用,因为“this”不再指向非方法函数中的全局对象。代替:
(function() {
"use strict";
console.log("This is "+this); // "This is undefined"
}());