在使用函数表达式声明函数之前调用函数。为什么?

时间:2012-11-10 08:34:27

标签: javascript jquery

我使用函数表达式inneroneinnertwo声明了两个函数。我首先宣布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();

2 个答案:

答案 0 :(得分:5)

这是有效的,因为只有在你调用它时才会调用innerone。并且当它被称为innertwo时被定义。

答案 1 :(得分: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();