欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-24 11:38:13
**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学习笔记目录
**

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

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

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

举个栗子:这里我们创建一个函数,
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:这里你可以发现当我们需要使用变量时是从里向外查找,所以是“小红”
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
但是当我们把小红去掉
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:那很显然弹出的应该是 “小蓝”
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级

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

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

优先级

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

那么提升是什么?下面举个栗子:我们创建一个函数,然后弹出a,但是我们并没有a
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:不会弹出任何东西,并且会报错
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
好,我们再看下一个例子:我们代码的执行顺序是由上至下,但是我们却是在调用a的下方 才申明变量,那么我们理所应当 是无法弹出 并且依然会报错
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:但是并不会报错,而是弹出“undefined”
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
这便是提升,本该在调用之前申明变量,却在调用后面申明变量,而我们这样写就相当于是在调用变量的前面写了一句 var a ;
即:
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
这二者是一个意思,这就是提升。

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

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

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

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

举个栗子:
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:这里你可以 看到我们函数调用在函数声明的前面,但是依旧能执行成功。
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级

下面我们开始举例理解我们的优先级:我们创建一个函数
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:这里有提升,所以弹出的是“undifined”
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
然后我们在上面的基础上,添加参数,
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:很显然参数的优先级大于提升,所以这里弹出“小绿”
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
然后依旧是在上面的基础上,我们添加一个函数进去,
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:很显然弹出的是我们的函数,因为 我们alert 括号内是a 没有加括号,所以弹出的是我们的函数本体,如果a后面加上括号,那么弹出的就是我们a 函数 运行的结果。
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
然后我们再在上面的基础上添加一个变量a ,
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:由于变量 的优先级是最高的,很显然这里弹出变量
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
优先级大概可以这么理解。

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

那么举个栗子:这种情况我们弹出的a应该是什么呢?
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:虽然是不看执行顺序的 ,即 二者一起在上面或者一起在下面或者一上一下,他们都是一样的,但是上面的会被下面的所覆盖,所以很显然这里弹出的该是下面的函数:
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级

拓展:

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

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

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

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

例(2):函数内部先已经申明过一个内部变量时,这时候我们再在下方声明一个 本该既是内部变量又是全局变量的a时,它会对上面一个局部变量a进行覆盖,然后变为内部变量
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:所以这里的内部变量被覆盖之后为”小绿“,而外部变量则为 ”小蓝“
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
例(3):但是当我们的函数内变量只声明了一个全局变量时,再声明一个既是内部也是全局的变量,那么他就会成为全局变量
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
执行结果:即两个都是”小绿“
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
**
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级

本文地址:https://blog.csdn.net/qq_45948983/article/details/107372527