如果函数有范围,它们应该在该范围内执行,但在这里我认为它是不同的参见代码:
function foo() {
var privateVal = "Private Val";
this.publicVal = "Public Val";
var privateAlert = function (str) {
alert(str + this.publicVal);
alert(str + privateVal);
}
this.Run = function () //see here
{
privateAlert("Private Call: ");
this.publicAlert = privateAlert;
this.publicAlert("Public Call: ");
privateAlert = this.publicAlert;
privateAlert("Private Call: ");
this.publicAlert("Public Call: ");
}
}
var bar = new foo();
bar.Run();
创建新对象时,Run()
成为对象的公共方法,或者方法只属于var bar
。该方法不能从其中执行privateAlert()
函数;因为函数具有范围,所以它只能从已声明的函数内执行,但是这个函数已经失去了创建它的范围并且它仍然被执行。请澄清一下吗?
答案 0 :(得分:6)
简单的解释:
因此,您可以从privateAlert
致电Run
,因为两者都已在foo
内定义。
还有一件事:Run
不是 bar
的私有方法,它是一种公共方法。