基于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的一个简单的脚本验证插件
Apr 05 Javascript
JavaScript 变量作用域分析
Jul 04 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
鼠标滚轮控制网页横向移动实现思路
Mar 22 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
基于node.js制作简单爬虫教程
Jun 29 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
Aug 16 Javascript
vue引入axios同源跨域问题
Sep 27 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
利用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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
php简单分页类实现方法
2015/02/26 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
php之可变函数的实例详解
2017/09/13 PHP
JScript中的undefined和&quot;undefined&quot;的区别
2007/03/08 Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
2013/01/18 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python协程gevent案例 爬取斗鱼图片过程解析
2019/08/27 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
运行Python编写的程序方法实例
2020/10/21 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
旅游专业毕业生自荐书
2014/06/30 职场文书
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
mysql 获取相邻数据项
2022/05/11 MySQL