簡體   English   中英

為什么要使用此方法在函數中聲明全局變量?

[英]Why using this declare a global variable in functions?

我有以下代碼:

function boo() {
    this.is_global = "Yes!";
}

當我運行boo(); ,我在window對象中有is_global ,這意味着is_global進入了全局上下文。
我希望僅在boo函數中具有is_global

這是正常現象嗎?

是的,這是正常行為。 如果您的函數是全局定義的,那么this只是window ,添加到window都是全局的。

this是指窗口。 如果要引用該函數,請使用:

arguments.callee.is_global = "Yes!";

現在:

window.is_global; //undefined
boo.is_global; //"Yes!"

另一種方法是在向其添加屬性時簡單地通過其自身名稱來引用boo。

function boo() {
    boo.is_global = "Yes!";
}

請注意,這會修改原始的boo函數對象。 如果您希望修改將boo用作構造函數而產生的boo所有實例 ,請在此處查看其他答案。

this是“被調用的函數”,你必須調用該函數作為一個對象的構造函數(使用new )。

var foo = new boo();

這將創建一個具有is_global屬性的boo 實例 這不會在構造函數本身上創建屬性。 觀看演示

如果不使用new (或如方法apply ),則this是“在該函數被調用的對象”。 由於在這種情況下沒有對象,因此使用默認對象。 在Web瀏覽器的上下文中,默認對象是window 所以:

var foo = boo();

是相同的

var foo = window.boo();

thisboo內部的window

查看MDN對this關鍵字的介紹

我猜您想聲明一個局部變量,因此請使用var語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM