him*_*sag 3 javascript lexical-scope web
我试图理解Javascript中的词法范围.在下面的例子中,我在另一个函数中编写了一个函数.当我运行时,我希望在第一个警报中弹出"爸爸",在第二个警报中弹出"妈妈".但实际发生的是,它在第一个弹出窗口显示"未定义",在第二个弹出窗口显示"妈妈".
function first(){
var x = "dad";
function second(){
alert(x);
var x = "mom";
alert(x);
}
second();
}
first();
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么在父函数中定义的变量"x"在子函数中不可见?奇怪的是,当我在子函数中删除变量"x"的声明时,它工作正常.有人可以在这里有效地了解词汇范围场景吗?
的var x在"第二"所声明的变量"X",隐藏在外部函数的变量"X".在'second'函数中对'x'的任何引用都引用该变量,即使它在声明之前.声明之前变量的值将是"未定义".
您可以查看"吊装"以获取更多信息.请参阅:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html