var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
如何显示1的输出?功能范围了解不清
return;
function a() {}
函数体内执行?
var a = 1;
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);
如何显示1的输出?功能范围了解不清
return;
function a() {}
函数体内执行?
您的代码具有误导性,风格使人们认为执行顺序很重要。标准的JavaScript引擎这些天将采取和重新格式化之前运行它:
var a = 1,
b = function() {
var a = function() {};
a = 10;
return;
};
b();
alert(a);
现在你可以了解到底发生了什么。在函数“b”中再次声明“a”,所以实际上现在有两个“a”变量。一个是“window.a”,另一个是“b var a”,但不是“b.a”,因为它不能在闭包或函数之外访问。
换句话说,你得到你的代码。
请让您的代码易读并且不要混淆这一观点。
在函数中用最后一行声明符号“a”。这是受转让声明影响的“a”。
函数声明语句被悬挂到函数的顶部并首先被解释。因此,赋值语句在之后有效地发生,您已经声明了一个名为“a”的函数(局部于“b”函数)。因此,该作业影响即符号,而不是全球“a”。
请记住,变量不是键入的,因此您将名称绑定到函数的事实不会阻止它稍后被赋值为数值。
哇。这是javascript可爱的灵活性的一个很好的例子,如果你不小心如何编写它,麻烦会让你陷入困境。 – 2011-12-16 22:33:20
是的!简单明了的JavaScript使它变得复杂:-) – Pointy 2011-12-16 22:35:08