寻找变量的范围

时间:2016-08-14 10:26:12

标签: javascript scope

function foo(a)
{

   var b = a*2;
   function bar(c)
   {

    console.log(a,b,c);
    var c= 3;
   }
   bar(4);
   var c= 4;
   var a= 2;
}

foo(1);

为什么c不是3?尽管var c = 3的事实是在bar()的词法范围内定义的,但为什么var c = 4被选中,即使它被定义在bar()调用之下? 请帮助我理解如何选择这些值并将其分配给变量。

1 个答案:

答案 0 :(得分:0)

  1. c在执行分配之前不会变为3,这是在您的日志输出之后。

  2. var c这里没有声明一个新变量,因为你已经有c作为函数的参数(但你是对的,如果确实如此,声明将被“悬挂” “---这就是你想在这里寻找得到好答案的术语。”

  3.   

    为什么选择var c = 4,即使它被定义在bar()调用下面?

    不是“挑选”。在您的功能中,您会看到4,因为c是函数参数,您将其称为bar(4)

    来自外部函数的c被内部函数中的另一个c的本地声明遮蔽,并且无法访问。