javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
**
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):但是当我们的函数内变量只声明了一个全局变量时,再声明一个既是内部也是全局的变量,那么他就会成为全局变量
执行结果:即两个都是”小绿“
**
本文地址:https://blog.csdn.net/qq_45948983/article/details/107372527
上一篇: 教你一分钟在win10终端成功安装Pytorch的方法步骤
下一篇: MS SQL读取JSON数据
推荐阅读
-
荐 javascript从入门到跑路-----小文的js学习笔记(17)------动态属性、复制变量值、传递参数和检测类型
-
荐 javascript从入门到跑路-----小文的js学习笔记(18 —1)------作用域以及作用域链
-
javascript从入门到跑路-----小文的js学习笔记(19)------- js的垃圾回收机制
-
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级
-
荐 javascript从入门到跑路-----小文的js学习笔记(17)------动态属性、复制变量值、传递参数和检测类型
-
荐 javascript从入门到跑路-----小文的js学习笔记(18 —1)------作用域以及作用域链
-
javascript从入门到跑路-----小文的js学习笔记(19)------- js的垃圾回收机制
-
javascript从入门到跑路-----小文的js学习笔记(18 —2)------ 执行顺序和优先级