以下是我的代码
function callName() {
var name="x";
function printName(){
alert(name);
}
return printName;
}
name = callName();
alert(name);
name();
Run Code Online (Sandbox Code Playgroud)
当我执行它时,alert语句正在完美地打印printName函数,但函数调用name()给出一个错误,指出字符串不是函数.如果范围是问题,警报应该打印名称而不是函数.我试图理解这里的闭包,并试图解决这个问题并与js中的范围管理混淆.
您尚未name在外部作用域中声明,因此它使用全局作用域,并且实际指向window.name.只需将其声明为局部变量,然后设置:
function callName() {
var name="x";
function printName(){
alert(name);
}
return printName;
}
var name = callName();
alert(name);
name();
Run Code Online (Sandbox Code Playgroud)
既然window.name是窗口的名称,当你指定它时,它将字符串内容分配给窗口的名称,并且仍然是一个字符串 - 这就是你无法调用它的原因name().
请注意,这仅在此代码本身位于另一个范围内时才有效 - 如果它位于全局范围内,即使使用var name也无济于事,因为它仍将与全局window.name属性冲突.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |