1 console.log(v1); 2 var v1 = 100; 3 function foo() { 4 console.log(v1); 5 var v1 = 200; 6 console.log(v1); 7 } 8 foo(); 9 console.log(v1); 10 // undefined undefined 200 100
一共有四次打印的动作,分别来看:
- 第一次打印,由于存在变量提升,第二句中的var v1=100会被提到顶部进行声明,变成var v1; 只声明未定义,当然是undefined。
- 第二次打印,是由于第八句调用了foo函数,进入foo会发现和第一条情况一样,不再赘述。
- 第三次打印,在本句话之前有声明有定义,此时v1=200,打印200。
- 第四次打印,由于函数内部所声明和定义的变量是局部变量,顾名思义就是不能拿出来用,而全局变量在第二句就定义好了,所以呢,值为100。