这是我做过的测试的一个例子:
function f1(var1){
alert('f1 called');
function f2(var2){
alert('f2 called');
}
this.data='something else';
this.f2 = f2;
}
f1.data='something';
f1.f3 = function(var3){
alert('f3 called');
}
console.log(f1); //shows the function
console.log(f1.data); //can have properties attached - cool
console.log(f1.f2(2)); //error: "f1.f2" is not a function
console.log(f1.f3(3)); //this works as expected
看来f1中的函数f2
在范围内是本地的。有没有相同的方法来调用像这样的函数内的函数?
答案 0 :(得分:7)
不幸的是,this
绑定到window
的全局范围,因为您尚未使用f1
new f1();
的实例
var f = new f1();
f.f2(); // Now works
答案 1 :(得分:0)
根据您要实现的目标,您可以使用几种模式来访问f2
之外的f1
功能。您可以使用f1
实例化new
对象:
function f1() {
this.f2 = function () { console.log('f2'); }
}
new f1().f2() //logs 'f2'
或者您可以从函数f2
返回函数f1
:
function f1() {
return function f2() { console.log('f2'); }
}
f1()() //logs 'f2'
答案 2 :(得分:0)
将代码更改为:
function f1 (var1){
alert('f1 called');
};
f1.data='something else';
f1.f2 = function f2(var2){
alert('f2 called');
};