这个自执行匿名函数和这个普通函数调用有什么区别?

时间:2016-07-07 14:21:44

标签: javascript

这有什么区别:

(function() {
    var Person = {
        sayHello: function() {
            alert('Hello World');
        }
    }

    Person.sayHello();
})();

而且:

var Person = {
    sayHello: function() {
        alert('Hello World');
    }
}

Person.sayHello();

除了后者创建一个公共函数,前者是一种创建一种私有函数的方法(你不能在括号外引用Person ...有什么区别?

4 个答案:

答案 0 :(得分:8)

第一个不会在当前作用域周围留下一个名为Person的变量(因为当IIFE完成执行时没有对它的引用),也不会覆盖任何其他名为{{1的变量在那个范围内。

(第二个缺少Person,但我认为这是问题中的拼写错误。)

答案 1 :(得分:2)

第一个将Person变量设为私有。一旦执行,它将丢弃SE功能内的所有内容。

答案 2 :(得分:2)

第一个版本创建'isolated namespace',所以如果你的代码中某处有Person变量,那么它就不会被覆盖

第二个版本在全局范围内创建Person,因此可能导致与代码的其他部分发生冲突

more info

答案 3 :(得分:1)

第一个是自执行匿名函数,这意味着其中没有任何定义可以在其外部访问,当它执行时,其中的所有内容都是"丢失& #34;

为了能够在该函数之外调用sayHello()方法,你必须将对象Person暴露给全局'window'对象

Consumer created

第二个是包含对象的变量,由于该变量在全局范围内声明,因此可以从任何地方访问它,并且可以创建新的方法和属性以及对象的实例。