我想知道为什么在这个自执行javascript函数中定义的Vector变量在它之前不需要var?这只是用于创建命名函数的其他类型的语法吗?这是否成功,我们不能将Vector作为参数传递给其他函数?
(function() {
Vector = function(x, y) {
this.x = x;
this.y = y;
return this;
};
//...snip
})()
答案 0 :(得分:3)
上面的代码构造使Vector成为命名空间中的全局变量,这可能没问题,因为它可能用作构造函数。
我不建议添加到全局名称空间,实际上看看requirejs这是使用模块化JS的一种非常好的方式。
答案 1 :(得分:2)
定义不带var
的变量使其成为全局变量。
答案 2 :(得分:2)
以任何其他方式定义Vector
只会在闭包范围内创建它;并且不会在关闭之外提供。
(function() {
var Vector = function(x, y) {
this.x = x;
this.y = y;
return this;
};
function Vector() {
// blah
};
//...snip
})()
var something = new Vector() // ERROR :<
没有“需要”var
关键字;使用它定义变量可用的范围。不使用它意味着变量是在全局范围内创建的。
答案 3 :(得分:1)
Vector
将附加到当前this
window
。至少在您提供的代码中,似乎不需要封闭的自执行功能。