功能范围理解不清楚

时间:2011-12-16 22:25:52

标签: javascript

var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);

如何显示1的输出?

是什么?
return;
function a() {}

在函数体内执行?

2 个答案:

答案 0 :(得分:6)

你宣布一个符号" a"在函数中的最后一行。那是" a"受转让声明的影响。

函数声明语句被提升到函数的顶部并首先被解释。因此,赋值语句有效地发生在之后你已经声明了一个名为" a"的函数(" b"函数的本地函数)。因此,分配会影响 符号,而不会影响全局" a"。

请记住,变量没有输入,因此您将某个名称绑定到某个函数这一事实并不会阻止它在以后被赋予数值。

答案 1 :(得分:4)

您的代码具有误导性,其风格使人们认为执行顺序很重要。如今,标准JavaScript引擎将采用该引擎并在将其运行到之前重新格式化:

var a = 1,
b = function() {
    var a = function() {};
    a = 10;
    return;
};
b();
alert(a);

现在您可以了解实际发生的情况。 ""在函数" b"中再次声明所以实际上有两个" a"变量现在。一个是" window.a"另一个是" b var a"但不是" b.a"因为它不能在封闭或功能之外进入。

换句话说,你得到你编码的东西。

请让您的代码易读,不要混淆。