gpt4 book ai didi

javascript - 为什么函数没有被调用并抛出错误?

转载 作者:行者123 更新时间:2023-11-30 07:08:25 25 4
gpt4 key购买 nike

下面是我的代码

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 也无济于事,因为它仍然会与全局 window.name 属性。

关于javascript - 为什么函数没有被调用并抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29032453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com