var作用域实战


<script type="text/javascript">
  var foo = {n:1};
  (function (foo) {
      console.log(foo.n,'1');
      foo.n = 3;
      var foo= {n:2};
      console.log(foo.n,'2');
  })(foo)
    console.log(foo.n,'3')
</script>

首先匿名函数调用传入参数,这时N=1;

匿名函数里定义变量foo,作用域在匿名函数里,匿名函数里没定义过foo,所以不会报错,输出2;

第三个打印3,为什么是3呢,匿名函数传入全局变量定义的foo=1,在匿名函数里更改了foo.n的值,这个值覆盖了全局变量FOO的值,所以全局里foo.n现在=3;所以第三个打印出来的是3;

结果 1,2,3