JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍


Posted in Javascript onMarch 01, 2018

某天写代码突然县道这个问题,顺势总结一波

JavaScript 函数和变量声明的“提前”(hoist)行为

简单的说 如果我们使用 匿名函数

var a = {}

这种方式, 编译后变量声明a 会“被提前”了,但是他的赋值(也就是a)并不会被提前。

也就是,匿名函数只有在被调用时才被初始化。

如果使用

function a () {};

这种方式, 编译后函数声明和他的赋值都会被提前。

也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。

看一个例子

function hereOrThere() { //function statement
  return 'here';
}
console.log(hereOrThere()); // alerts 'there'
function hereOrThere() {
  return 'there';
}

我们会发现alert(hereOrThere) 语句执行时会alert('there')!这里的行为其实非常出乎意料,主要原因是JavaScript 函数声明的“提前”行为,简而言之,就是Javascript允许我们在变量和函数被声明之前使用它们,而第二个定义覆盖了第一种定义。换句话说,上述代码编译之后相当于

function hereOrThere() { //function statement
 return 'here';
}
function hereOrThere() {//申明前置了,但因为这里的申明和赋值在一起,所以一起前置
 return 'there';
}
console.log(hereOrThere()); // alerts 'there'

我们期待的行为

var hereOrThere = function () { // function expression
  return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function () {
  return 'there';
};

这段程序编译之后相当于:

var hereOrThere;//申明前置了
hereOrThere = function() { // function expression
 return 'here';
};
console.log(hereOrThere()); // alerts 'here'
hereOrThere = function() {
 return 'there';
};

总结

以上所述是小编给大家介绍的JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jquery+json 通用三级联动下拉列表
Apr 19 Javascript
jQuery对象[0]是什么含义?
Jul 31 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
JavaScript实现数字数组正序排列的方法
Apr 06 Javascript
JSON 数据详解及实例代码分析
Jan 20 Javascript
微信小程序canvas写字板效果及实例
Jun 15 Javascript
动态加载、移除js/css文件的示例代码
Mar 20 Javascript
vue-quill-editor富文本编辑器简单使用方法
Sep 21 Javascript
微信小程序自定义导航栏实例代码
Apr 05 Javascript
Vue路由之JWT身份认证的实现方法
Aug 26 Javascript
原生JS实现多条件筛选
Aug 19 Javascript
vue在图片上传的时候压缩图片
Nov 18 Vue.js
详解用Node.js写一个简单的命令行工具
Mar 01 #Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 #Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 #Javascript
vue父组件向子组件传递多个数据的实例
Mar 01 #Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 #Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
Mar 01 #Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 #Javascript
You might like
php GUID生成函数和类
2014/03/10 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
PHP文件上传类实例详解
2016/04/08 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
JavaScript实现向右伸出的多级网页菜单效果
2015/08/25 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
python文件的md5加密方法
2016/04/06 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
Python进程间通信Queue实例解析
2018/01/25 Python
python爬虫爬取网页表格数据
2018/03/07 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
小学生自我评价范文
2014/01/25 职场文书
户外活动总结范文
2014/04/30 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
销售人员管理制度
2015/08/06 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android