基于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框架veryide.librar源代码
Mar 05 Javascript
让元素在网页中可拖动示例代码
Aug 13 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
Aug 10 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
Sep 01 Javascript
实例代码详解jquery.slides.js
Nov 16 Javascript
学习JavaScript设计模式之策略模式
Jan 12 Javascript
js实现加载更多功能实例
Oct 27 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
Webpack3+React16代码分割的实现
Mar 03 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实现zip文件解压操作
2015/11/03 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
Yii实现简单分页的方法
2016/04/29 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue组件与复用详解
2018/04/08 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
JQuery使用数组遍历跳出each循环
2020/09/01 jQuery
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
python迭代器实例简析
2014/09/25 Python
举例讲解Python设计模式编程中的访问者与观察者模式
2016/01/26 Python
python后端接收前端回传的文件方法
2019/01/02 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
聊城大学毕业生自荐书
2014/02/01 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
给老师的一封感谢信
2015/01/20 职场文书
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang