请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

一个题目的问题

var foo = {n:1};
(function(foo){            
    var foo;               
    console.log(foo.n);    
    foo.n = 3;             
    foo = {n:2};           
    console.log(foo.n);    
})(foo);
console.log(foo.n);


为什么输出是1 2 3 

在函数里面也定义了一个foo

那么变量提升,在函数内部的第一行应该就是var foo;

此时foo为undefined

那么输出也是undefined才是啊

正在回答

2回答

foo 是一个参数,参数本身就是被传入值的,是有值的。你的疑问可以用三行代码来解释:var a = 100; var a; console.log(a); 试试打印出什么来

1 回复 有任何疑惑可以回复我~
之桃呀 2018-12-20 09:30:10

这道题为什么最后一个输出的是3呢

0 回复 有任何疑惑可以回复我~
  • 提问者 李行知 #1
    我自己的理解是
    foo={n:1}
    function test(foo){
      var foo
      console.log(foo.n);
    }
    // ==>
    foo={n:1}
    function test(foo){
      var foo
      var foo
      foo={n:1} // foo=foo
      console.log(foo.n);
    }
    
    这两个是等价的
    所以
    foo={n:1}
    function test (foo){            
          var foo               
          console.log(foo.n);    
          foo.n = 3;             
          foo = {n:2};           
          console.log(foo.n);    
    }
    // ==>
    function test (foo){    
      var foo
      var foo
      foo={n:1}
      console.log(foo.n);    
      foo.n = 3;             
      foo = {n:2};           
      console.log(foo.n);    
    }
    
    
    最后一个是3的原因是外部的foo跟内部的foo的指向不同了的原因
    回复 有任何疑惑可以回复我~ 2018-12-20 15:41:59
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信