Home  >  Q&A  >  body text

javascript - 函数作用域章节中的一个案例疑问?

var b=7;//添加这行
function doSomething(a){
    function doSomethingElse(a){
        return a-1;
    }
    var b;//去掉这一行
    b=a+doSomethingElse(a*2);
    alert(b);
}
doSomething(3);//8

在《你不知道的javascirpt》案例中,在b=a+doSomethingElse(a*2)这行的上边加了var b,如果去掉
var b这行,即使在全局作用域中写入var b=7;在调用代码后,照样会输出数值8,而不是数值7;

能不能认为这行var b这行代码可有可无?求大神解答!谢谢!

PHPzPHPz2720 days ago274

reply all(3)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-11 12:06:30

    不能说可有可无吧,只要是去掉,修改的b就是全局的b了,虽然执行的函数结果不变,但是一个导致全局b被修改,一个则不会,看你需求

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-11 12:06:30

    不是!
    如果不加,只有一个全局变量b,因此 b=xx;alert(b)是都是访问全局变量 b.
    如果加,有两个变量b,第一个是全局变量,第二是局部变量b=xx;alert(b)是访问的局部变量。
    你可以在doSomething(3)后面加一句alert(b)试试

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 12:06:30

    你把他去掉 之所以 值没变, 是你将 外面的b重新被赋值了 加后的值,跟外面的b是多少 没有关系;如果你不去掉,就是把加后的值赋给了里面的 变量 b;虽然变量名字都是b 但是作用域不一样,所以不是同一个b,因为根本就不是同一块内存。

    reply
    0
  • Cancelreply