2010-05-07 107 views
4

我想知道为什么Vector变量这种自我执行JavaScript函数不需要前一个变种中定义的?这只是创建命名函数的其他类型的语法吗?这是否这样做,所以我们不能将Vector作为参数传递给其他函数?JavaScript函数定义

(function() { 
    Vector = function(x, y) { 
     this.x = x; 
     this.y = y; 

     return this; 
    }; 

    //...snip 
})() 

回答

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关键词;使用它定义变量可用的范围。不使用它意味着变量是在全局范围内创建的。

+0

感谢大家的帮助。 VS2008 JS智能感知可能更多的问题;但由于某些原因,Vector并没有出现在自执行功能之外...... – Pierreten 2010-05-07 18:29:50

2

定义的变量,而不var使得全球。上述

3

的代码构造使得向量在命名空间,因为它可能是打算用作构造,这可能是确定一个全局变量。

我不会建议增加全局命名空间,其实看看requirejs它的一个非常好的方式与模块化的JS工作。

1

Vector在这种情况下将附加到当前this这将是window。至少在你提供的代码中,似乎并不需要包含自我执行功能。