我无法找到以下答案。
我最担心的是启动一个大多数环境(主要是浏览器)不支持的项目。我发现可以用两种不同的方式编写模块:函数或对象文字。
对象文字
var foo = {
bar: function(){}
}
函数表达式
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
第二个选项具有创建私有成员的能力,而根据我的发现,第一个选项没有能力。我发现的信息还声称第一个选项是一个对象,而第二个选项是一个函数表达式。
JS的新手,所以我可能会碰到一些电线。除了可以将内部成员设为私有之外,该表示法还有其他区别吗?根据我的阅读,两者都可以遵循模块,观察者和单例模式。我发现的唯一区别是原型设计模式。
答案 0 :(得分:1)
有几个要知道的术语。首先,它与功能有关:
function foo(){
}
匿名函数声明:
function(){
}
Function Expression(将函数分配给变量):
var foo = function(){
}
Immediately Invoked Function Expression(第一组括号将匿名函数声明转换为表达式):
(function(){
})();
现在,除了功能之外,您还在询问 Object Literal :
var foo = {
bar: function(){}
}
vs。函数表达式:
var foo = function(){
var bar = function (){};
return{
method: bar
}
}
甚至是函数声明:
function foo(){
var bar = function (){};
return{
method: bar
}
}
您对函数语法能够创建私有成员的说法是正确的,而对象文字不具有这种能力(这只是对键/值进行分组的一种方式)。但是,另一个重要的区别是,函数可以用作构造函数(var f = new foo()
),并且可以具有Prototypes,而对象常量不能。因此,在设置继承模式时,功能通常更具通用性。