js05-预解析与函数的提升

预解析
1.函数的提升与变量的提升:函数和变量都有提升,如果函数的名字和变量的名字一样,那么是谁的作用比较大呢?
在这里插入图片描述
如此代码,当我们定义一个函数和变量是相同的名字的时候,在函数和变量之前打印这个相同的名字,会发现,函数的作用比变量强,其执行顺序是这样的:
在这里插入图片描述
那么此时,我们就会有另外一个疑惑,会不会是因为我们把函数放在了变量的前面,导致了函数覆盖了变量,所以我们把函数放在变量之前,看看结果是什么样的。
在这里插入图片描述
结果是一样的,这说明不是因为我们把函数定义在后面而导致的结果,而是函数的作用比于变量的作用大,所以当出现函数的名字和变量的名字相同的时候,变量会被函数覆盖,其执行过程相等于是这样的,
在这里插入图片描述
**但是需要注意的一点是,具名函数会被提升,也就是函数的声明会被提升:

function  fn1(){
    conlose.log('函数的声明')
}

但是匿名函数,函数表达式是不会被提升的:

function fn(){
   conlose.log('函数表达式')
   }
```**

2.作用域:作用域分为两种:全局作用域和局部作用域
      1.1全局作用域:直接便写在script标签中的js代码,是全局作用域,单独的一个js文件中的代码也是全局作用域。   全局作用域在页面打开时创建,在页面关闭时销毁;
      全局作用域中有一个全局对象window,属于BOM,所有创建的变量都会作为window对象的属性被保存。
      所有创建的函数都会作为window对象的方法保存。
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210513183123430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ3NTMxODI5,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210513183123405.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210513183123420.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ3NTMxODI5,size_16,color_FFFFFF,t_70)
    局部作用域:代码的名字只能在函数的内部其作用。在全局里面无法调用。

   隐式全局变量:
           

```javascript
function fun(){
      var a1 = 1   //局部变量
       a2 = 2,   //全局变量
       a3 = 3;  //全局变量
       }
function  fun(){
  var a1 = a2 =a3 =1;
  }  //其中a1是局部变量,a2和a3是全局变量;
function  fun(){
     var a1 = 1; a2 = 2; a3=3;
     }  //其中a1是局部变量,a2和a3是全局变量;

声明变量用‘var’关键字,如果不使用‘var’声明的变量就是隐式全局变量;

上一节补充:函数也可以作为参数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值