[英]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();
this
是boo
內部的window
。
查看MDN對this
關鍵字的介紹 。
我猜您想聲明一個局部變量,因此請使用var
語句 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.