3
如果函數有範圍,應在該範圍內執行的,但在這裏,我認爲這是不同的看到代碼:JavaScript中的函數是否有作用域?
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()
成爲一個對象或公共方法方法只能屬於變種bar
。該方法不應該能夠在其中執行privateAlert()
函數;因爲函數具有範圍,所以它只能從已經聲明的函數中執行,但是這個函數已經失去了它創建的範圍,並且它仍然被執行。請澄清這一點?
我甚至不明白*你怎麼會感到困惑,所以指出你的錯誤並不容易。 –
聽起來像你對關閉感到困惑 - https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures –
在javascript中沒有「私人方法」這樣的東西。如果它的屬性(可調用)在對象上,它可以由任何代碼運行。 「私人」的唯一方法是通過關閉來實現,這是你使用「privateAlert」功能完成的。 「運行」相當於C#/ Java中的公共函數,並且會被認爲類似於「類成員」。公共成員的確可以用更高級的語言來調用私有函數,所以爲什麼不在這裏呢?不過,正如@dystroy所說,不要將javascript函數混淆爲真正的OOP方法 –