繁体   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