0

我使用函数表达式innerone和声明了两个函数innertwo。我先声明innerone,然后再声明innertwo。在里面innerone我正在调用innertwo函数。但我担心的是我在使用函数表达式innertwo后声明,innerone这意味着innertwo没有提升。那么为什么这些函数按这个顺序工作呢?是否必须更改他们的订单?

这是代码

var one = function () {
    var innerone = function () {
        innertwo();
    },

    innertwo = function () {
        console.log('innertwo');
    };

    return {
        innerone: innerone
    };
};

var o = new one();
o.innerone();
4

2 回答 2

5

它之所以有效,是因为只有在您调用它时才会调用 innerone。当它被称为 innertwo 时,它已经被定义了。

于 2012-11-10T08:37:02.880 回答
0

您在评论中询问了编写此代码的更简单方法,因此这里有一些更简单的方法。第一个仍然返回结构,并且可以在没有 . 的情况下作为函数调用new。第二个向函数对象添加了一个属性,但仍然保留了私有函数innertwo()。第二个选项对我来说看起来最干净。

选项1:

function one() {
    function innertwo() {
        console.log('innertwo');
    }

    return {
        innerone: function() {
            innertwo();
        }
    };
}

var o = one();    // new is not needed here
o.innerone();

选项 2:

function one() {
    function innertwo() {
        console.log('innertwo');
    }

    this.innerone = function () {
        innertwo();
    };
};


var o = new one();
o.innerone();
于 2012-11-10T09:02:36.597 回答