区别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 相关文章推荐
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
JS.findElementById()使用介绍
Sep 21 Javascript
JavaScript中的依赖注入详解
Mar 18 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
基于jQuery实现响应式圆形图片轮播特效
Nov 25 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
Dec 07 Javascript
js编写三级联动简单案例
Dec 21 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
ES6中数组array新增方法实例总结
Nov 07 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
Apr 14 Javascript
layui添加动态菜单与选项卡
Jul 26 Javascript
关于vue属性使用和不使用冒号的区别说明
Oct 22 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 之 没有mysql支持时的替代方案
2006/10/09 PHP
实现获取http内容的php函数分享
2014/02/16 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
JavaScript 字符编码规则
2009/05/04 Javascript
Extjs学习笔记之四 工具栏和菜单
2010/01/07 Javascript
详细讲解JS节点知识
2010/01/31 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
详解如何在react中搭建d3力导向图
2018/01/12 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
js回到页面指定位置的三种方式
2020/12/17 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
Python-基础-入门 简介
2014/08/09 Python
python实现的重启关机程序实例
2014/08/21 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
浅析PEP572: 海象运算符
2019/10/15 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
小学教师师德承诺书
2014/05/23 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
红与黑读书笔记
2015/06/29 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
HDFS免重启挂载新磁盘
2022/04/06 Servers
什么是Python装饰器?如何定义和使用?
2022/04/11 Python