JavaScript中变量提升与函数提升经典实例分析


Posted in Javascript onJuly 26, 2018

本文实例讲述了JavaScript中变量提升与函数提升。分享给大家供大家参考,具体如下:

从两个实例说起:

eg1:

var i;
console.log(i); // 2

eg2:

console.log(i); // undefined
var i = 2;

1、提升

变量和函数声明从它们在代码中出现的位置被提升到了最上面。

注意:

只有声明本身会被提升,而赋值操作不会被提升。

变量会提升到其所在函数的最上面,而不是整个程序的最上面。

函数声明会被提升,但函数表达式不会被提升:

func1(); // Uncaught TypeError: func1 is not a function
func2(); // Uncaught ReferenceError: func2 is not defined
var func1 = function func2() { ... };

JavaScript中的ReferenceErrorTypeError

① ReferenceError:引用错误。JavaScript引擎查询变量时,若在作用域里没有找到该变量,JavaScript引擎就会抛出一个ReferenceError。

② TypeError:类型错误。当在作用域中找到了某变量引用,然后让该变量去做力所不能及的事情时,如引用它一个不存在的属性,或将非函数的变量用作函数引用,JavaScript引擎就会抛出一个TypeError。

2、函数优先

函数声明和变量声明都会被提升,但是需要注意的是函数会先被提升,然后才是变量。

func(); // 1
var func;
function func() {
  console.log(1);
}
func = function() {
  console.log(2);
}

运行结果:输出1而不是2

理由:var func;尽管出现在function func()之前,但它是重复的声明,会被忽略,因为函数声明会被提升到普通变量之前。上述代码等价于:

function func() {
  console.log(1);
}
func(); // 1
func = function() {
  console.log(2);
}

尽管重复的声明会被忽略掉,但出现在后面的函数声明还是可以覆盖前面的:

func(); // 3
function func() {
  console.log(1);
}
func = function() {
  console.log(2);
}
function func() {
  console.log(3);
}

一个普通块内部的函数声明通常会被提升到其所在作用域的顶部,提升过程不会被条件判断所控制:

func(); // 2
var flag = true;
if (flag)
  function func() { console.log(1); }
else
  function func() { console.log(2); }

注意:尽量避免在块内声明函数,在JavaScript未来的版本中上述行为可能会发生改变。

更多关于JavaScript相关内容可查看本站专题:《JavaScript常用函数技巧汇总》、《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Prototype使用指南之enumerable.js
Jan 10 Javascript
WordPress JQuery处理沙发头像
Jun 22 Javascript
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
JavaScript中最简洁的编码html字符串的方法
Oct 11 Javascript
jQuery插件expander实现图片翻转特效
May 21 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
Sep 24 Javascript
详解Node.js中的事件机制
Sep 22 Javascript
jquery实现图片列表鼠标移入微动
Dec 01 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
React Native 图片查看组件的方法
Mar 01 Javascript
对vue v-if v-else-if v-else 的简单使用详解
Sep 29 Javascript
vue中监听返回键问题
Aug 28 Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 #Javascript
详解ECMAScript typeof用法
Jul 25 #Javascript
微信小程序动态生成二维码的实现代码
Jul 25 #Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 #Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 #Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 #Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 #Javascript
You might like
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
php中array_fill函数的实例用法
2021/03/02 PHP
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
JS模块与命名空间的介绍
2013/03/22 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
js new Date()实例测试
2019/10/31 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
python动态监控日志内容的示例
2014/02/16 Python
python的类方法和静态方法
2014/12/13 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
python生成圆形图片的方法
2020/03/25 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
ECHT官方网站:男女健身服
2020/02/14 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
大学生军训自我鉴定
2014/02/12 职场文书
2014年情人节活动方案
2014/02/16 职场文书
购房协议书范本
2014/04/11 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
人与自然观后感
2015/06/16 职场文书