猿问

JavaScript作用域小题

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

运行代码 b的值为10,而a is not defined;

疑惑:a和b同为定义在aaa()函数里的局部变量。为何b为10、而a报错?

丁小小科
浏览 2137回答 5
5回答

qq_迈巧克力_0

函数会开辟出一个新的作用域,在这个作用域里可以新创建变量,也就是里面的a,b。但这里有个特殊情况, var a=b=10;这种写法中a是局部变量没有问题,但b会当做全局变量去创建,所以就使得b可以在aaa函数之外被调用,而a作为一个局部变量,会在aaa函数返回后销毁,所以无法被alert。

一城一梦梦在指尖

连等会让b变成全局变量,你可以试试在函数里分别输出a,b,然后在函数外面再输出一遍

ahao430

这就相当于var a=b;b=10;

Bossen

这个是变量声明提升好不好!(hoisting)上面的变量声明实际上是这样的:var a,b;a=b;//把b的值赋给a,此时b没有值,那么a就是undifinedb=10;javascript中把除了在函数中声明的变量以及没有用var声明的变量作为全局变量,此处的b典型的是函数内的局部变量,比如:function add(){a=10}//此处的a就是全局变量,随时可以调用。千万别搞错了!这是初学者经常犯的错误!把这些小细节消化了,冲击百万年薪吧。哈哈

易丿天

你一下弹两个窗肯定报错啊,你这样写alert(a,b)
随时随地看视频慕课网APP
我要回答