js中函数声明与函数表达式


Posted in Javascript onJune 03, 2015

目前为止,我们一直没有对函数声明和函数表达式加以区别。而实际上,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非一视同仁。解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解释执行。如下例子:

alert(sum(10,10));

function sum(num1,num2)

{

    return num1+num2;

}

以上代码完全可以正确执行,因为在代码开始执行之前,解析器就已经通过一个名为函数声明提升(function declaration hoisting)的过程,读取并将函数声明添加到执行环境中。对代码求值时,JavaScript引擎在第一遍会声明函数并将它们放到源代码树的顶部。所以,即使声明函数的代码在调用它的代码后面,JavaScript引擎也能把函数声明提升到顶部。如果像下面的例子所示,把上面的函数声明改为等价的函数表达式,就会在执行的时候出现错误。

alert(sum(10,10));

var sum=function(num1,num2)

{

    return num1+num2;

};

以上代码会在运行的时候出现错误,原因在于函数位于一个初始化语句中,而不是一个函数声明。换句话讲,在执行到函数所在的语句之前,变量sum中不会保存有对函数的引用;而且,由于第一行代码就会导致“unexpected identifier”(意外标识符)错误,实际上也不会执行到下一行。

除了声明时候可以通过变量访问函数这一点区别之外,函数声明与函数表达式的语法其实是等价的。

注:也可以同时调用函数声明和函数表达式,例如 var sum=function sum(){}。不过,这种语法在Safari中会导致错误。

以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。

Javascript 相关文章推荐
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
JQuery遍历元素的后代和同胞实现方法
Sep 18 Javascript
webpack实现热更新(实施同步刷新)
Jul 28 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
Apr 27 jQuery
vue富文本编辑器组件vue-quill-edit使用教程
Sep 21 Javascript
vue-cli构建vue项目的步骤详解
Jan 27 Javascript
Vue3 中的数据侦测的实现
Oct 09 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
用vue 实现手机触屏滑动功能
May 28 Javascript
JavaScript基本语法讲解
Jun 03 #Javascript
通过实例理解javascript中没有函数重载的概念
Jun 03 #Javascript
ECMAScript中函数function类型
Jun 03 #Javascript
JavaScript运算符小结
Jun 03 #Javascript
浅谈JavaScript字符串与数组
Jun 03 #Javascript
详谈javascript中的cookie
Jun 03 #Javascript
jquery滚动特效集锦
Jun 03 #Javascript
You might like
php下实现农历日历的代码
2007/03/07 PHP
解析PHP 使用curl提交json格式数据
2013/06/29 PHP
js函数般调用正则
2008/04/08 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
jquery实现下拉框左右选择功能
2017/02/21 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
js实现坦克大战游戏
2020/02/24 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
Python中基本的日期时间处理的学习教程
2015/10/16 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
mac 安装python网络请求包requests方法
2018/06/13 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Python collections模块的使用方法
2020/10/09 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
小学教师的个人自我鉴定
2013/10/24 职场文书
教育孩子心得体会
2014/01/01 职场文书
财务总监管理职责范文
2014/03/09 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
企业文化标语口号
2014/06/09 职场文书
授权委托书格式
2014/07/31 职场文书
北京英语导游词
2015/02/12 职场文书
个人工作保证书
2015/02/28 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书