为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript作用域小题

JavaScript作用域小题

丁小小科 2016-08-04 19:35:44
function aaa(){                  var a=b=10;                 }                 aaa();                 alert(b);                 alert(a);运行代码 b的值为10,而a is not defined;疑惑:a和b同为定义在aaa()函数里的局部变量。为何b为10、而a报错?
查看完整描述

5 回答

已采纳
?
qq_迈巧克力_0

TA贡献2条经验 获得超2个赞


函数会开辟出一个新的作用域,在这个作用域里可以新创建变量,也就是里面的a,b。

但这里有个特殊情况,

var a=b=10;

这种写法中a是局部变量没有问题,但b会当做全局变量去创建,所以就使得b可以在aaa函数之外被调用,而a作为一个局部变量,会在aaa函数返回后销毁,所以无法被alert。

查看完整回答
1 反对 回复 2016-08-04
?
一城一梦梦在指尖

TA贡献11条经验 获得超6个赞

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

查看完整回答
1 反对 回复 2016-08-04
  • 丁小小科
    丁小小科
    是的,谢谢回答。var a=b=10 其实就是 b=10 var a =b;
?
ahao430

TA贡献35条经验 获得超41个赞

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

查看完整回答
反对 回复 2016-08-05
?
Bossen

TA贡献13条经验 获得超4个赞

这个是变量声明提升好不好!(hoisting)
上面的变量声明实际上是这样的:
var a,b;
a=b;//把b的值赋给a,此时b没有值,那么a就是undifined
b=10;
javascript中把除了在函数中声明的变量以及没有用var声明的变量作为全局变量,此处的b典型的是函数内的局部变量,比如:function add(){

a=10

}//此处的a就是全局变量,随时可以调用。
千万别搞错了!这是初学者经常犯的错误!把这些小细节消化了,冲击百万年薪吧。哈哈

查看完整回答
1 反对 回复 2016-08-05
?
易丿天

TA贡献60条经验 获得超48个赞

你一下弹两个窗肯定报错啊,你这样写alert(a,b)

查看完整回答
反对 回复 2016-08-04
  • 5 回答
  • 1 关注
  • 2136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信