区别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 相关文章推荐
Div自动滚动到末尾的代码
Oct 26 Javascript
jQuery调用WebService的实现代码
Jun 19 Javascript
jQuery实现点击标题输入详细信息
Apr 16 Javascript
关于JavaScript对象的动态选择及遍历对象
Mar 10 Javascript
jQuery构造函数init参数分析
May 13 Javascript
AngularJS使用ngMessages进行表单验证
Dec 27 Javascript
Vue2路由动画效果的实现代码
Jul 10 Javascript
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
微信小程序实现录音时的麦克风动画效果实例
May 18 Javascript
微信小程序页面上下滚动效果
Nov 18 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
小程序实现图片移动缩放效果
May 26 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
php 变量定义方法
2009/06/14 PHP
浅析PHP的静态成员函数效率更高的原因
2014/06/13 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JavaScript跨浏览器获取页面中相同class节点的方法
2015/03/03 Javascript
javascript制作的简单注册模块表单验证
2015/04/13 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JavaScript函数中关于valueOf和toString的理解
2016/06/14 Javascript
Js 获取、判断浏览器版本信息的简单方法
2016/08/08 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
JS拖动选择table里的单元格完整实例【基于jQuery】
2019/05/28 jQuery
axios如何取消重复无用的请求详解
2019/12/15 Javascript
[56:42]完美世界DOTA2联赛循环赛 Matador vs Forest 第二场 11.06
2020/11/06 DOTA
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
儿童编程python入门
2018/05/08 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
惠普美国官方商店:HP Official Store
2016/08/28 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
大学生饮食连锁店创业计划书
2014/01/17 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
校园环保标语
2014/06/13 职场文书
幼儿园见习报告
2014/10/30 职场文书
2016新年致辞
2015/08/01 职场文书
学生安全责任协议书
2016/03/22 职场文书
小学四年级作文之最感动的一件事
2019/11/01 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫