区别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 call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
Sep 28 Javascript
jQuery中live方法的重复绑定说明
Oct 21 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
Aug 27 Javascript
Angular2入门--架构总览
Mar 29 Javascript
JavaScript队列函数和异步执行详解
Jun 19 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
Sep 28 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
Aug 02 jQuery
vue登录注册实例详解
Sep 14 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
基于postman获取动态数据过程详解
Sep 08 Javascript
使用vue判断当前环境是安卓还是IOS
Apr 12 Vue.js
详解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和javascript之间变量的传递实现代码
2012/12/19 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
很可爱的输入框
2008/08/03 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
jQuery Masonry瀑布流插件使用方法详解
2017/01/18 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
Python操作SQLite简明教程
2014/07/10 Python
python关键字and和or用法实例
2015/05/28 Python
python版简单工厂模式
2017/10/16 Python
python+opencv实现阈值分割
2018/12/26 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
几个MySql的面试题
2013/04/22 面试题
艺术专业大学生自我评价
2013/09/22 职场文书
反对邪教标语
2014/06/30 职场文书
财务工作失职检讨书
2014/11/21 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
2015年化验员工作总结
2015/04/10 职场文书
2016年寒假见闻
2015/10/10 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS