区别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 继承详解(三)
Jul 13 Javascript
JS中 用户登录系统的解决办法
Apr 15 Javascript
js加载读取内容及显示与隐藏div示例
Feb 13 Javascript
jquery中checkbox使用方法简单实例演示
Nov 24 Javascript
AngularJs Scope详解及示例代码
Sep 01 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
Dec 12 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 Javascript
Vue-Access-Control 前端用户权限控制解决方案
Dec 01 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 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更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
2013/01/24 Javascript
JQuery对id中含有特殊字符的转义处理示例
2013/09/06 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
2013/11/12 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
常用原生JS兼容性写法汇总
2016/04/27 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
Python简单实现两个任意字符串乘积的方法示例
2018/04/12 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python将数据插入数据库的代码分享
2020/08/16 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
python 爬虫如何实现百度翻译
2020/11/16 Python
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
篝火晚会策划方案
2014/05/16 职场文书
学生实习证明范文
2014/09/28 职场文书
2015年商场工作总结
2015/04/27 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
经典法律座右铭(50句)
2019/08/15 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js