区别JavaScript函数声明与变量声明


Posted in Javascript onSeptember 12, 2018

今天,又由一到题目引发了一场我跟JS基础的较量:首先是

var getName = function(){alert(1)};
function getName(){alert(2)};
getName();// 1

or

function getName(){alert(2)};
var getName = function(){alert(1)};
 
getName();// 1

为什么我调换声明顺序,结果还是输出以 var 形式声明的函数的值?

有人回答我说 "啊,变量提升呀...",我最开始的理解,就算变量提升,第一种情况提升之后,应该是这样啊:

var getName;
getName = function(){alert(1)};
function getName(){alert(2)};

最后应该输出 2 才对啊(很理直气壮)。

殊不知不只有var声明才会提前,以function fn(){}这种形式声明的函数,会被提升到作用域的最最顶部,然后再是变量的提升。
具体请看下面例子:

fn();//Uncaught TypeError: fn is not a function
var fn = function(){console.log(1)};

but

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

足以说明函数提升的更凶一些。

Javascript 相关文章推荐
jquery获取下拉列表的值为null的解决方法
Mar 18 Javascript
文本框根据输入内容自适应高度的代码
Oct 24 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
JQuery中使用ajax传输超大数据的解决方法
Jul 14 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
JavaScript中立即执行函数实例详解
Nov 04 Javascript
Bootstrap table使用方法汇总
Nov 17 Javascript
vue axios 表单提交上传图片的实例
Mar 16 Javascript
详解javascript replace高级用法
Feb 17 Javascript
package.json配置文件构成详解
Aug 27 Javascript
Vue3.0中的monorepo管理模式的实现
Oct 14 Javascript
微信小程序实现下拉加载更多商品
Dec 29 Javascript
详解js中Array的方法及技巧
Sep 12 #Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
Sep 12 #Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 #Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 #Javascript
vue服务端渲染缓存应用详解
Sep 12 #Javascript
angularjs中判断ng-repeat是否迭代完的实例
Sep 12 #Javascript
如何解决React官方脚手架不支持Less的问题(小结)
Sep 12 #Javascript
You might like
体育彩票排列三组选三算法分享
2014/03/07 PHP
php实现的二分查找算法示例
2017/06/20 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
Javascript 读书笔记索引贴
2010/01/11 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
JS实现侧悬浮浮动实例代码
2013/11/29 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
理解javascript对象继承
2016/04/17 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
2017/11/11 jQuery
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
在类Unix系统上开始Python3编程入门
2015/08/20 Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
python-str,list,set间的转换实例
2018/06/27 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
半年思想汇报
2013/12/30 职场文书
初三新学期计划书
2014/05/03 职场文书
班级心理活动总结
2014/07/04 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书