javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级

   日期:2020-07-17     浏览:107    评论:0    
核心提示:**javascript从入门到跑路-----小文的js学习笔记(1)---------script、alert、document。write() 和 console.log 标签javascript从入门到跑路-----小文的js学习笔记(2)--------- 语法构成、关键字和保留字、变量javascript从入门到跑路-----小文的js学习笔记(3)---------javascript中的几种数据类型……javascript从入门到跑路-----小文的js学习笔记目录**&nb

**
javascript从入门到跑路-----小文的js学习笔记(1)---------script、alert、document。write() 和 console.log 标签

javascript从入门到跑路-----小文的js学习笔记(2)--------- 语法构成、关键字和保留字、变量

javascript从入门到跑路-----小文的js学习笔记(3)---------javascript中的几种数据类型


javascript从入门到跑路-----小文的js学习笔记目录
**

       关注小文我们一起学习进步。

       首先上一节学习了作用域和作用域链,作用域是变量能够执行的一个区域;而我们的作用域链是各个不同区域变量之间的关系,内部的可以访问外部的,但是外部的不能访问内部的。

今天先来补充一个上节没学到的知识:
      在我们的作用域链中,当我们使用变量的时候,是先找本层作用域,若未找到,则逐级向外查找。

举个栗子:这里我们创建一个函数,

执行结果:这里你可以发现当我们需要使用变量时是从里向外查找,所以是“小红”

但是当我们把小红去掉

执行结果:那很显然弹出的应该是 “小蓝”

      然后下面我们来说说另一个东西-----优先级

         注意:光理论是不够的 ,在此送大家2020最新企业级 Vue3.0/Js/ES6/TS/React/node等实战视频教程,点击此处免费获取,小白勿进哦

优先级

     当我们的变量、函数、参数以及提升同时存在的时候,我们的优先级是 变量最高,其次是函数,然后是参数,最低的是提升,即:变量—>函数—>参数---->提升

那么提升是什么?下面举个栗子:我们创建一个函数,然后弹出a,但是我们并没有a

执行结果:不会弹出任何东西,并且会报错

好,我们再看下一个例子:我们代码的执行顺序是由上至下,但是我们却是在调用a的下方 才申明变量,那么我们理所应当 是无法弹出 并且依然会报错

执行结果:但是并不会报错,而是弹出“undefined”

这便是提升,本该在调用之前申明变量,却在调用后面申明变量,而我们这样写就相当于是在调用变量的前面写了一句 var a ;
即:

这二者是一个意思,这就是提升。

注意:只有申明的是局部变量才可以提升,申明的全局变量是不会提升的。

补充: 在刚才那种情况 申明变量的三种情况

var 变量名 局部变量
window.变量名 全局变量
变量名 既属于局部变量,也属于全局变量

       然后我们再补充一个 ,我们函数的声明是不看执行顺序的 ,意思就是我们在函数声明前面 调用函数也是可以成功调用的(只要后面函数声明了的 )

举个栗子:

执行结果:这里你可以 看到我们函数调用在函数声明的前面,但是依旧能执行成功。

下面我们开始举例理解我们的优先级:我们创建一个函数

执行结果:这里有提升,所以弹出的是“undifined”

然后我们在上面的基础上,添加参数,

执行结果:很显然参数的优先级大于提升,所以这里弹出“小绿”

然后依旧是在上面的基础上,我们添加一个函数进去,

执行结果:很显然弹出的是我们的函数,因为 我们alert 括号内是a 没有加括号,所以弹出的是我们的函数本体,如果a后面加上括号,那么弹出的就是我们a 函数 运行的结果。

然后我们再在上面的基础上添加一个变量a ,

执行结果:由于变量 的优先级是最高的,很显然这里弹出变量

优先级大概可以这么理解。

补充: 记得上面学到过 我们的函数声明是不看执行顺序的,意思是先写后写都一样。

那么举个栗子:这种情况我们弹出的a应该是什么呢?

执行结果:虽然是不看执行顺序的 ,即 二者一起在上面或者一起在下面或者一上一下,他们都是一样的,但是上面的会被下面的所覆盖,所以很显然这里弹出的该是下面的函数:

拓展:

这里我们要拓展一个东西,就是我们前面学习补充到的一个声明变量的事情,在函数里面我们声明变量时

var 变量名 局部变量
window.变量名 全局变量
变量名 既属于局部变量,也属于全局变量

然后我们学过优先级和 作用域链知道 执行顺序,然后下面注意几种情况。

例(1):函数内已经出现过提升 , 即a相当于 ”undifined“,然后 我们声明 a = ”小绿“,这个时候,这个本来该既是内部变量又是全局变量的 a 就会变成 内部变量。

例(2):函数内部先已经申明过一个内部变量时,这时候我们再在下方声明一个 本该既是内部变量又是全局变量的a时,它会对上面一个局部变量a进行覆盖,然后变为内部变量

执行结果:所以这里的内部变量被覆盖之后为”小绿“,而外部变量则为 ”小蓝“

例(3):但是当我们的函数内变量只声明了一个全局变量时,再声明一个既是内部也是全局的变量,那么他就会成为全局变量

执行结果:即两个都是”小绿“

**

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服