这里为什么可以访问到函数内定义的变量(非闭包)

代码如下:

     (function test() {
      var a = b = 5;
      alert(typeof a);
      alert(typeof b);
    })()
    alert(typeof a);
    alert(typeof b);

输出结果:
number number undefined number

这里函数外为什么还能访问到b呢

var a = b = 5;
实际上等于
b = 5;
var a = b;

b没有经过var声明,是全局变量

那么ab之间算是什么关系,是传递或者存储的关系吗,还是只是赋值?