基于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的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
May 24 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
May 10 Javascript
JavaScript验证图片类型(扩展名)的函数分享
May 05 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
判断访客终端类型集锦
Jun 05 Javascript
JS组件Bootstrap Select2使用方法解析
May 30 Javascript
JS键盘版计算器的制作方法
Dec 03 Javascript
js实现下拉菜单效果
Mar 01 Javascript
vue使用自定义icon图标的方法
May 14 Javascript
原生JS实现汇率转换功能代码实例
May 13 Javascript
js实现html滑动图片拼图验证
Jun 24 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 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 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
2013/01/23 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
CSS3实现翘边的阴影效果的代码示例
2016/06/13 HTML / CSS
详解CSS3浏览器兼容
2016/12/14 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
大学自我鉴定范文
2013/12/26 职场文书
总经理司机职责
2014/02/02 职场文书
三查三看党性分析材料
2014/02/18 职场文书
软件售后服务承诺书
2014/05/21 职场文书
调解协议书范本
2016/03/21 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android
MongoDB安装使用并实现Python操作数据库
2021/06/28 MongoDB
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python