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.ajax传递中文参数的解决方法 推荐
Mar 28 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
JS取模、取商及取整运算方法示例
Oct 13 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
Apr 25 Javascript
vue2.0 keep-alive最佳实践
Jul 06 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
Node.js API详解之 querystring用法实例分析
Apr 29 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 Javascript
Ajax 的初步实现(使用vscode+node.js+express框架)
Jun 18 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
Vue中的循环及修改差值表达式的方法
2019/08/29 Javascript
python字符串连接方法分析
2016/04/12 Python
Python编程scoketServer实现多线程同步实例代码
2018/01/29 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
python3字符串输出常见面试题总结
2020/12/01 Python
工程现场管理求职自荐信
2013/10/02 职场文书
数学检讨书1000字
2014/02/24 职场文书
求职信怎么写
2014/05/23 职场文书
事业单位鉴定材料
2014/05/25 职场文书
师范生自荐信模板
2014/05/28 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
2015年助理工程师工作总结
2015/04/03 职场文书
商务司机岗位职责
2015/04/10 职场文书
民事调解协议书
2016/03/21 职场文书
八年级作文之友情
2019/11/25 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
Oracle使用别名的好处
2022/04/19 Oracle