JavaScript类定义样式有什么区别?

时间:2010-03-05 23:52:12

标签: javascript

我不清楚JavaScript中这两种“类”定义的实际区别。

方法a:

function myclass() {}

方法b:

myclass = function() {}

有什么不同吗?

4 个答案:

答案 0 :(得分:4)

这些是函数,第一个是函数声明,第二个是带有函数表达式的变量赋值

主要区别在于函数声明在解析时在当前作用域中被提升,它们的行为就像你在它的封闭范围的顶部声明它们一样。

两者的语法非常相似,唯一的语法差异是名称​​函数表达式是可选的,解析器根据您使用它的“上下文”知道您正在使用哪一个,例如您的第一个示例是函数声明,因为函数本身是在Program(技术上是任何函数之外,全局范围内)或FunctionBody中定义的(在一个函数内部。)

函数表达式是在表达式上下文中进行评估时创建的,例如:

function foo () {} // function declaration
(function foo() {}); // function expression

在上面的例子中,第二个被解释为一个函数表达式,因为它被括号括起来,括号只能包含表达式 ......

我强烈推荐您以下有关该主题的深入文章:

答案 1 :(得分:2)

后者是一个为变量赋值的闭包。一旦删除变量(或指定了不同的值),您将无法再调用该函数。除此之外,两者几乎相同,功能是Javascript中的头等公民。

答案 2 :(得分:2)

首先,你要定义的是函数,而不是类。

其次,第二个定义将myclass放入全局命名空间,而第一个定义则不会(它将在函数范围中定义)。但是,据我所知,以下几乎大致相同:

function myclass() {}

var myclass = function() {}

存在一些小差异,即explored over on developer.mozilla.org。话虽如此,我从未发现任何差异。

答案 3 :(得分:0)

在第二种情况下,您将该函数声明为变量。对于OOP中的这类内容特别有用:

var myObject = new Object();
myObject.add = function(a,b) {
    return a + b;
};  
myObject.add(1, 2);