基于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/vbs/vbscript加密的编码异处理小结
Jun 25 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
js闭包的用途详解
Nov 09 Javascript
使用Node.js实现HTTP 206内容分片的教程
Jun 23 Javascript
jquery使整个div区域可以点击的方法
Jun 24 Javascript
javascript设计简单的秒表计时器
Sep 05 Javascript
jquery trigger函数执行两次的解决方法
Feb 29 Javascript
Bootstrap每天必学之模态框(Modal)插件
Apr 26 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
PHP访问数据库集群的方法小结
2016/03/14 PHP
JS计算网页停留时间代码
2014/04/28 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
浅谈JavaScript的闭包函数
2016/12/08 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
详解React路由传参方法汇总记录
2020/11/29 Javascript
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
python实现ftp客户端示例分享
2014/02/17 Python
Python 异常处理实例详解
2014/03/12 Python
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
python实现微信防撤回神器
2019/04/29 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
简单了解python数组的基本操作
2019/11/26 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
AOP的定义以及作用
2013/09/08 面试题
业务经理岗位职责
2013/11/11 职场文书
英语商务邀请函范文
2014/01/16 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
美容院营销方案
2014/03/05 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
工程项目经理任命书
2014/06/05 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
工作能力自我评价2015
2015/03/05 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL