这有什么区别:
(function() {
var Person = {
sayHello: function() {
alert('Hello World');
}
}
Person.sayHello();
})();
而且:
var Person = {
sayHello: function() {
alert('Hello World');
}
}
Person.sayHello();
除了后者创建一个公共函数,前者是一种创建一种私有函数的方法(你不能在括号外引用Person ...有什么区别?
答案 0 :(得分:8)
第一个不会在当前作用域周围留下一个名为Person
的变量(因为当IIFE完成执行时没有对它的引用),也不会覆盖任何其他名为{{1的变量在那个范围内。
(第二个缺少Person
,但我认为这是问题中的拼写错误。)
答案 1 :(得分:2)
第一个将Person
变量设为私有。一旦执行,它将丢弃SE功能内的所有内容。
答案 2 :(得分:2)
第一个版本创建'isolated namespace',所以如果你的代码中某处有Person变量,那么它就不会被覆盖
第二个版本在全局范围内创建Person,因此可能导致与代码的其他部分发生冲突
答案 3 :(得分:1)
第一个是自执行匿名函数,这意味着其中没有任何定义可以在其外部访问,当它执行时,其中的所有内容都是"丢失& #34; 强>
为了能够在该函数之外调用sayHello()方法,你必须将对象Person暴露给全局'window'对象:
Consumer created
第二个是包含对象的变量,由于该变量在全局范围内声明,因此可以从任何地方访问它,并且可以创建新的方法和属性以及对象的实例。