JS变量提升及函数提升实例解析


Posted in Javascript onSeptember 03, 2020

1在js中只有两种作用域

a:全局作用域

b:函数作用域

在ES6之前,js是没有块级作用域。

首先来解释一下什么是没有块级作用域?

JS变量提升及函数提升实例解析

所以此时 是可以打印输出变量a的值。

2:什么是变量提升?

在我们的js中,代码的执行时分两步走的,1、预解析 2、一步一步执行

在预解析阶段:首先会在全局作用域内,js解析器会找所有的 var 、function 、参数,并提前到当前作用域的最顶上去(变量的赋值操作不会提前,还在原来的地方),此时并没有执行代码。

然后再开始一行一行执行代码。遇到了函数调用,于是进入到函数作用域内,又开始分两步骤走,1、预解析 2、一步一步执行。以此类推。

那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作作用域的最顶上去。

即变量可以在声明之前使用,值为undefined。

JS变量提升及函数提升实例解析

那么上面这种写法其实等价于下面这种写法:

JS变量提升及函数提升实例解析

看几个例子:

JS变量提升及函数提升实例解析

把上面的例子稍作改动:

结果就会大不一样,

JS变量提升及函数提升实例解析

再看一个例子:

JS变量提升及函数提升实例解析

3:什么是函数提升?

JS变量提升及函数提升实例解析

输出的结果是:

JS变量提升及函数提升实例解析

注意:函数声明式,会将函数的声明和定义一起提升到作用域的最顶上去。

如果是这种写法:函数表达式声明的函数

JS变量提升及函数提升实例解析

例子:

JS变量提升及函数提升实例解析

输出的结果是:

JS变量提升及函数提升实例解析

最后的总结:

1:所有的声明都会提升到作用域的最顶上去。

2:同一个变量只会声明一次,其他的会被忽略掉。

3:函数声明的优先级高于变量申明的优先级,并且函数声明和函数定义的部分一起被提升。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery实现视频播放页面的关灯开灯效果
May 27 Javascript
javascript实现行拖动的方法
May 27 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
Oct 09 Javascript
socket.io学习教程之深入学习篇(三)
Apr 29 Javascript
koa socket即时通讯的示例代码
Sep 07 Javascript
vue中的inject学习教程
Apr 24 Javascript
js实现简易计算器功能
Oct 18 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 Javascript
Vue绑定用户接口实现代码示例
Nov 04 Javascript
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
Apr 19 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 #Javascript
Vue js with语句原理及用法解析
Sep 03 #Javascript
Vue通过provide inject实现组件通信
Sep 03 #Javascript
Vue组件通信$attrs、$listeners实现原理解析
Sep 03 #Javascript
Vue父组件监听子组件生命周期
Sep 03 #Javascript
JavaScript 几种循环方式以及模块化的总结
Sep 03 #Javascript
Vuejs通过拖动改变元素宽度实现自适应
Sep 02 #Javascript
You might like
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
JavaScript 注册事件代码
2011/01/27 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
js中url对象化管理分析
2017/12/29 Javascript
vue-cli webpack2项目打包优化分享
2018/02/07 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
vue中轮训器的使用
2019/01/27 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
python网络编程之五子棋游戏
2020/05/14 Python
Python 如何在字符串中插入变量
2020/08/01 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
音乐学个人的自荐书范文
2013/11/26 职场文书
村干部培训方案
2014/05/02 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
赢在执行观后感
2015/06/16 职场文书
小学语文教学反思范文
2016/03/03 职场文书
导游词之徐州云龙湖
2019/11/19 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
Python保存并浏览用户的历史记录
2022/04/29 Python