关于JavaScript变量提高方面须要注意的地方

最近看到一道某手机公司的校招前端笔试题,感受颇有意思。与你们分享一下
本文适合对于变量提高存疑的小伙伴们查看。前端

下列代码输出结果正确的是:()函数

var val = 12;
function fun1(){
   console. log(val);
   var val = 20;
   console.log(val);
}
fun1();

A.12 20code

B.12 12io

C.undefined 20console

D.20 undefinedfunction

毫无疑问这道题涉及到了变量提高。答案的第二项是20应该是没有争议的,至关于变量

var val=20;
console.log(val);

定义一个变量,再输出。
就是答案的第一项对于那些不太熟悉变量提高的人们很容易就会选错,毕竟笔试

var val = 12;
 function fun1(){
   console.log(val);//12
 }
 fun1();

函数外部定义一个变量,函数内输出值,没什么问题。
那若是题目是这样呢:
var val = 12;
function fun1(){分享

console.log(val);//12
val = 20;
console.log(val);//20

}
fun1();笔试题

函数外部定义一个变量,函数内部先输出得12再从新进行赋值,再次输出得20。
那么咱们回到一开始的题目。
题目是这样

下列代码输出结果正确的是:()

var val = 12;
function fun1(){
   console. log(val);//undefined
   var val = 20;
   console.log(val);//20
}
fun1();

和上面比,不一样的地方在于函数内部输出过一次后又从新定义并赋值,虽然只是多了个val,但结果就不同了,他影响着第一个val的输出值。
为何第一个输出值为underfined,
其实上面的代码等同于var val = 12;

function fun1(){
   var val;
   console. log(val);//undefined
   val = 20;
   console.log(val);//20
}
fun1();

因为函数内从新定义val,致使变量val被提高到了顶端,但它被赋予的值并无提高,因此第一个console.log(val)输出的只是定义过但没有被赋值的val,第二个console.log输出的是被赋值20的val。因此这道题的答案为C。

相关文章
相关标签/搜索