我不清楚JavaScript中这两种“类”定义的实际区别。
方法a:
function myclass() {}
方法b:
myclass = function() {}
有什么不同吗?
答案 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);