我使用函数表达式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();
答案 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();