[英]why is the the function not getting called and throwing me an error?
下面是我的代碼
function callName() {
var name="x";
function printName(){
alert(name);
}
return printName;
}
name = callName();
alert(name);
name();
當我執行它時,警報語句完美地打印了printName函數,但是函數調用name()給出錯誤,指出字符串不是函數。 如果范圍是問題,警報應打印出名稱而不是功能。 我試圖在這里理解閉包,並嘗試這樣做,並與js中的范圍管理相混淆。
您尚未在外部范圍中聲明name
,因此它正在使用全局范圍,並且實際上指向window.name
。 只需將其聲明為局部變量,即可設置:
function callName() {
var name="x";
function printName(){
alert(name);
}
return printName;
}
var name = callName();
alert(name);
name();
由於window.name
是窗口的名稱,因此當您為其分配窗口時,它會將字符串內容分配給窗口的名稱,並且仍然是字符串-這就是為什么您不能使用name()
對其進行調用的原因。
請注意,這僅在此代碼本身在另一個范圍內時才有效-如果它在全局范圍內,即使使用var name
也無濟於事,因為它仍會與global window.name
屬性沖突。
這是因為在callName()
您將var name
設置為string。 如果您這樣做:
var name = callName();
您將創建一個與callName()
內部不同的新var name
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.