区别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 相关文章推荐
JavaScript监测ActiveX控件是否已经安装过的代码
Sep 02 Javascript
一个javascript图片阅览组件
Nov 09 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
js定时器的使用(实例讲解)
Jan 06 Javascript
javascript中var的重要性分析
Feb 11 Javascript
如何防止JavaScript自动插入分号
Nov 05 Javascript
jQuery中的deferred对象和extend方法详解
May 08 jQuery
Angular.js中下拉框实现渲染html的方法
Jun 18 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
Mar 19 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
微信小程序与webview交互实现支付功能
Jun 07 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
Nov 12 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
php图像处理类实例
2015/07/28 PHP
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
javascript每日必学之封装
2016/02/23 Javascript
浅谈JavaScript for循环 闭包
2016/06/22 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
编程语言Python的发展史
2014/09/26 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
Python数据操作方法封装类实例
2017/06/23 Python
Python求出0~100以内的所有素数
2018/01/23 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
个人自荐书
2013/12/20 职场文书
财务内勤岗位职责
2014/04/17 职场文书
老龄工作先进事迹
2014/08/15 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
2014年班组工作总结
2014/11/20 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫