区别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聚焦于第一个字段的代码
Oct 15 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
JavaScript将数字转换成大写中文的方法
Mar 23 Javascript
JS打印组合功能
Aug 04 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
jQuery UI Grid 模态框中的表格实例代码
Apr 01 jQuery
JS实现批量上传文件并显示进度功能
Jun 27 Javascript
使用yeoman构建angular应用的方法
Aug 14 Javascript
利用js实现前后台传送Json的示例代码
Mar 29 Javascript
this在vue和小程序中的使用详解
Jan 28 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+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
ext jquery 简单比较
2010/04/07 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
jQuery实现滚动切换的tab选项卡效果代码
2015/08/26 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
为什么JavaScript没有块级作用域
2016/05/22 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
javascript实现图片左右滚动效果【可自动滚动,有左右按钮】
2016/09/19 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
js在HTML的三种引用方式详解
2020/08/29 Javascript
js实现缓动动画
2020/11/25 Javascript
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python利用正则表达式提取字符串
2016/12/08 Python
python使用RNN实现文本分类
2018/05/24 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
Yahoo-PHP面试题1
2016/07/20 面试题
市场营销专业应届生自荐信
2014/06/19 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript