js typeof的问题

        (function(){
            var a=b=6;
            console.log(typeof a);
            console.log(typeof b);
        })();

        console.log(typeof a);
        console.log(typeof b);

输出为:
number
number
undefined
number

第三行为undefined?
如果第三行为undefined第四行为什么是number?

阅读 3k
4 个回答

var a = b = 6;

实际上等同于这样:var a = 6; b = 6;
因为变量 b 没有关键字声明,所以被注册成为了全局变量。

所以 a 是匿名函数里的局部变量,局外找不到,输出为 undefined
b 被注册成为了全局变量,所以能在外面找到,输出为 number

var a = b = 6;
这个行为导致 b 成为全局变量

这里不是typeof的问题,是连等赋值的问题,这里你需要理解2点
1.赋值语句有一个返回值

let a = 6 //a = 6 是一个赋值语句,它(整个语句 a = 6)的值为6
let b
let c = (b = 2) // c = 2

2.非严格模式

var a = b = 6 
等价与
var a

a = (b = 6) 
// b 在当前作用域不存在,在非严格模式下,自动声明一个全局变量b
// 所以这端代码干了两件事,1.声明全局变量b赋值为6; 2. a赋值为"b = 6"这个赋值语句的值,也就是6

赋值是从右往左进行的
也就是先执行 b=6b 声明为了全局变量
然后执行 var a = b 声明局部变量 a

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题