基于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 相关文章推荐
JavaScript Archive Network 集合
May 12 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
Sep 23 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
浅析javascript函数表达式
Feb 10 Javascript
html+js+highcharts绘制圆饼图表的简单实例
Aug 04 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
Jan 11 Javascript
php结合js实现多条件组合查询
May 28 Javascript
vue集成chart.js的实现方法
Aug 20 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
Mar 24 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 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 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
详解php命令注入攻击
2019/04/06 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
Javascript 自定义类型方法小结
2010/03/02 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python定时器使用示例分享
2014/02/16 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Python读取表格类型文件代码实例
2020/02/17 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
工程造价自荐信
2013/10/09 职场文书
人事专员工作职责
2014/02/22 职场文书
服务质量承诺书
2014/03/27 职场文书
学校节能减排倡议书
2014/05/16 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技