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 相关文章推荐
JS中toFixed()方法引起的问题如何解决
Nov 20 Javascript
Javascript跨域请求的4种解决方式
Mar 17 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
论JavaScript模块化编程
Mar 07 Javascript
PHP捕捉异常中断的方法
Oct 24 Javascript
canvas实现图像放大镜
Feb 06 Javascript
Angular实现预加载延迟模块的示例
Oct 12 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
Oct 25 Javascript
详解Vue路由自动注入实践
Apr 17 Javascript
vue+Element实现搜索关键字高亮功能
May 28 Javascript
vue iview 隐藏Table组件里的某一列操作
Nov 13 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安装攻略:常见问题解答(二)
2006/10/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
JavaScript几种形式的树结构菜单
2010/05/10 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JavaScript模拟鼠标右键菜单效果
2020/12/08 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
python之文件读取一行一行的方法
2018/07/12 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
python lambda的使用详解
2021/02/26 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
恶搞卫生巾广告词
2014/03/18 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
女生节标语
2014/06/26 职场文书
七年级思品教学反思
2016/02/20 职场文书
安全生产协议书
2016/03/22 职场文书
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server