基于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 相关文章推荐
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
Oct 23 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
Jun 19 Javascript
jquery处理页面弹出层查询数据等待操作实例
Mar 25 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
微信小程序实现的贪吃蛇游戏【附源码下载】
Jan 03 Javascript
React Router V4使用指南(精讲)
Sep 17 Javascript
使用watch在微信小程序中实现全局状态共享
Jun 03 Javascript
js实现的格式化数字和金额功能简单示例
Jul 30 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
Nov 04 Javascript
原生js实现下拉选项卡
Nov 27 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 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
虹吸壶是谁发明的?煮出来的咖啡好喝吗
2021/03/04 冲泡冲煮
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
jquery中常用的SET和GET
2009/01/13 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
js之事件冒泡和事件捕获详细介绍
2013/10/28 Javascript
form.submit()不能提交表单的原因分析
2014/10/23 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
理解 javascript 中的函数表达式与函数声明
2017/07/07 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
优雅的elementUI table单元格可编辑实现方法详解
2018/12/23 Javascript
vue轻量级框架无法获取到vue对象解决方法
2019/05/12 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
js实现弹窗效果
2020/08/09 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
python实现图片文件批量重命名
2020/03/23 Python
python 字符串常用函数详解
2019/09/11 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
Java中实现多态的机制
2015/08/09 面试题
估算杭州有多少软件工程师
2015/08/11 面试题
酒店端午节促销方案
2014/02/18 职场文书
邹越感恩父母演讲稿
2014/08/28 职场文书
社区节水倡议书
2015/04/29 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书
创业计划书之干洗店
2019/09/10 职场文书