基于js的变量提升和函数提升(详解)


Posted in Javascript onSeptember 17, 2017

一、变量提升

在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。

上个简历的例子如:

console.log(global); // undefined
var global = 'global';
console.log(global); // global

function fn () {
console.log(a); // undefined
var a = 'aaa';
console.log(a); // aaa
}
fn();

之所以会是以上的打印结果,是由于js的变量提升,实际上上面的代码是按照以下来执行的:

var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(global); // undefined
global = 'global'; // 此时才赋值
console.log(global); // 打印出global

function fn () {
var a; // 变量提升,函数作用域范围内
console.log(a);
a = 'aaa';
console.log(a);
}
fn();

二、函数提升

js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!如:

console.log(f1); // function f1() {}  
console.log(f2); // undefined 
function f1() {}
var f2 = function() {}

只所以会有以上的打印结果,是由于js中的函数提升导致代码实际上是按照以下来执行的:

function f1() {} // 函数提升,整个代码块提升到文件的最开始<br>console.log(f1);  
console.log(f2);  
var f2 = function() {}

结语:基本上就是这样,要熟练掌握的话可以多做些练习,test:

console.log(f1()); 
console.log(f2);  
function f1() {console.log('aa')}
var f2 = function() {}
(function() {
console.log(a);
a = 'aaa';
var a = 'bbb';
console.log(a);
})();

以上这篇基于js的变量提升和函数提升(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js下写一个事件队列操作函数
Jul 19 Javascript
js获取class的所有元素
Mar 28 Javascript
使用typeof方法判断undefined类型
Sep 09 Javascript
jquery实现标签上移、下移、置顶
Apr 26 Javascript
Javascript实现div的toggle效果实例分析
Jun 09 Javascript
javascript自定义滚动条实现代码
Apr 20 Javascript
高效Web开发的10个jQuery代码片段
Jul 22 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
JavaScript之json_动力节点Java学院整理
Jun 29 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
Dec 03 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
May 24 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
Apr 26 Javascript
利用express启动一个server服务的方法
Sep 17 #Javascript
限时抢购-倒计时的完整实例(分享)
Sep 17 #Javascript
canvas基础绘制-绚丽倒计时的实例
Sep 17 #Javascript
Angularjs自定义指令实现分页插件(DEMO)
Sep 16 #Javascript
JS分页的实现(同步与异步)
Sep 16 #Javascript
AngularJs 延时器、计时器实例代码
Sep 16 #Javascript
引入JavaScript时alert弹出框显示中文乱码问题
Sep 16 #Javascript
You might like
php表单提交问题的解决方法
2011/04/12 PHP
CakePHP框架Model关联对象用法分析
2017/08/04 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
基于jQuery的自动完成插件
2011/02/03 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
jQuery往textarea中光标所在位置插入文本的方法
2015/06/26 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
Vue函数式组件-你值得拥有
2019/05/09 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
Python实现把xml或xsl转换为html格式
2015/04/08 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Python2与Python3的区别实例总结
2019/04/17 Python
python输入错误后删除的方法
2019/10/12 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
历史专业毕业生的自我鉴定
2013/11/15 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
镇创先争优活动总结
2014/08/28 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
幼师辞职信范文
2015/02/27 职场文书
交通事故被告代理词
2015/05/23 职场文书
2016年会开场白台词
2015/06/01 职场文书
人民的好儿女观后感
2015/06/18 职场文书