一个题目的问题

来源:19-6 存储

李行知

2017-09-20

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回答

双越

2017-09-20

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

1
0

之桃呀

2018-12-20

这道题为什么最后一个输出的是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
共1条回复

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程