簡體   English   中英

為什么函數沒有被調用並拋出錯誤?

[英]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.

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