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