javascript变量和函数提升
当浏览器处理JavaScript代码的时,包括变量和函数在内的所有声明都会在任何代码被执行前被处理了
变量提升
在javascript中,有一个神奇的现象,就是有时候变量声明在后面,却在前面就可以调用。代码如下
console.log(a);
var a = 5;
变量a的声明被提升到了当前作用域的顶端,即变量提升
但是因为仅仅是变量声明提升了,后面赋值语句并不会提升,conole.log打印a时候,此时a是未赋值的,所有为undefined。
函数提升
在同一个<script…/>元素内,JavaScript允许先调用函数,然后在后面再定义函数,相当于提前声明了该函数。代码如下:
<script>
console.log(add(2,5));
function add(a,b){
sum=a+b;
return sum;
}
</script>
可以看到,我们先调用的函数后声明的函数,说明函数在运行前已经被提前到了最前面。
我们都知道,创建函数有声明式和字面量。下面试试字面量,代码如下:
<script>
console.log(add(2,5));
var add = function add(a,b){
sum=a+b;
return sum;
}
</script>
发现控制台出现报错
我们可以将add看作变量,它的声明语句会被提升到顶端,但赋值语句(函数体)并不会提升。可以看出,只有函数声明才有提升。
总结:
我们现在已经知道变量和函数都会提升,那么谁的优先级更高呢,测试一下。
console.log(add(2,5));
function add(a,b){
sum=a+b;
return sum;
}
var add = 0
运行后结果是函数结果,而不是undefined,说明虽然都提升了,可以看出,变量的局部提升优先于函数声明的整体提升。