javascript变量和函数提升

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,说明虽然都提升了,可以看出,变量的局部提升优先于函数声明的整体提升。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章