javascript - 函数作用域章节中的一个案例疑问?
PHPz
PHPz 2017-04-11 12:04:30
0
3
273
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这行代码可有可无?求大神解答!谢谢!

PHPz
PHPz

学习是最好的投资!

reply all(3)
伊谢尔伦

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

巴扎黑

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

洪涛

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

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!