如果函数有范围,它们应该在该范围内执行,但在这里我认为它是不同的查看代码:
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()
函数;因为函数有作用域,它只能在它被声明的函数内执行,但是这个函数已经失去了它被创建的作用域并且它仍然被执行。请澄清一下?