我曾尝试阅读有关该主题的其他帖子但尚无运气。在下面的代码中,为什么f2()不能访问f1()中定义的var。 var“name”不是函数f2()的全局吗?不应该f2()看到var“name”?
function f1() {
var name = "david";
function f2() {
document.writeln(name);
}
document.writeln(name);
}
f2(); // does not write out "david".
答案 0 :(得分:8)
您的f2()
仅在f1()
范围内定义。你无法全球称呼它
答案 1 :(得分:1)
Javascript是功能级别的范围,而不是块范围。函数可以访问它的父级函数变量,但不能访问其中函数中定义的变量。您可以从f1返回f2并以此方式调用
function f1() {
var name = "david";
document.writeln(name);
return f2
function f2() {
document.writeln(name);
}
}
var f2 = f1();
f2();
答案 2 :(得分:0)
您需要阅读Javascript Closures。
以下是您的代码段的一个版本,它演示了如何在内部函数中从外部函数访问变量(如果您想全局调用内部函数)。
function f1()
{
var name = "david";
return function()
{
console.log(name);
}
}
var f2 = f1();
f2();