这两个声明在javascript中有什么区别

时间:2017-02-11 16:41:16

标签: javascript

这两种声明之间有什么区别。我认为两者的作用方式相同。第一个是函数对象,第二个是变量对象何时使用请帮助。

function timers() {
    function start() {}

    function end() {}
};

var add = {
    start: function () {
        some block of code
    },
    end: function () {
        some block of code
    },
};

2 个答案:

答案 0 :(得分:3)

两者完全不同。

在您的第一个示例中,startend只能在timers内访问,并且每次调用时都会创建新的startend timers 1}}。 timers是对函数的引用。当您需要在timers内只需要在其中而不是在其中的函数时,您可以使用此格式,并且可以访问特定于timers调用的信息。创建

在第二个示例中,创建了一个对象,其中startend属性引用了函数。这些可以通过add.startadd.end进行调用。 add是对非功能对象的引用。当你想要一个可以通过该对象引用使用的具有函数的对象时,你可以使用它。

答案 1 :(得分:1)

1。 timers函数声明,其中包含2个嵌套函数startend。要创建timers的新对象,您需要使用类似var objTimer = new timers();的构造函数,但由于函数startend嵌套在timers内,因此如果没有曝光,则无法将其称为objTimer.start()objTimer.end()

 function timers() {
        function start() {}

        function end() {}
    };

因此,如果我们将上面的代码修改为类似的内容,则返回包含要公开的成员的对象,那么它将与您的第二个代码类似。

 function timers() {
        function start() {}

        function end() {}

        return {
             startPublic : start,
             endPublic : end
        }
    };

2。 add是一个对象文字,其中包含2个函数startend。在这种情况下,由于startend属性是公开的,因此您可以将其称为add.start()add.end()

var add = {
    start: function () {
        some block of code
    },
    end: function () {
        some block of code
    },
};