区别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 相关文章推荐
准确获得页面、窗口高度及宽度的JS
Nov 26 Javascript
JavaScript中this关键字使用方法详解
Mar 08 Javascript
Jquery 滑入滑出效果实现代码
Mar 27 Javascript
Jquery 1.42 checkbox 全选和反选代码
Mar 27 Javascript
Jquery中dialog属性小记
Sep 03 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
js中的caller和callee属性介绍和例子
Jun 07 Javascript
BootStrap注意事项小结(五)表单
Mar 10 Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
创建Vue项目以及引入Iview的方法示例
Dec 03 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
Jun 19 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文档更新介绍
2011/07/22 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
2016/05/13 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
载入进度条 效果
2006/07/08 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
2013/07/31 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Tensorflow之Saver的用法详解
2018/04/23 Python
python处理document文档保留原样式
2019/09/23 Python
python验证码图片处理(二值化)
2019/11/01 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
致100米运动员广播稿
2014/02/14 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
入党心得体会
2019/06/20 职场文书
对讲机知识
2022/04/07 无线电