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 相关文章推荐
理解JSON:3分钟课程
Oct 28 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
分享经典的JavaScript开发技巧
Nov 21 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
Apr 03 jQuery
Javascript中从学习bind到实现bind的过程
Jan 05 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
微信小程序实现左滑修改、删除功能
Oct 19 Javascript
了解javascript中let和var及const关键字的区别
May 24 Javascript
JavaScript常用工具函数库汇总
Sep 17 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实现长连接的方法与注意事项的问题
2013/05/10 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
根据地区不同显示时间的javascript代码
2007/08/13 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
Angular2实现自定义双向绑定属性
2017/03/22 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
python中异常报错处理方法汇总
2016/11/20 Python
python爬虫_自动获取seebug的poc实例
2017/08/05 Python
python在文本开头插入一行的实例
2018/05/02 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
Python filter过滤器原理及实例应用
2020/08/18 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
夜班门卫岗位职责
2013/12/09 职场文书
四个太阳教学反思
2014/02/01 职场文书
财产公证书样本
2014/04/04 职场文书
车辆工程专业求职信
2014/04/28 职场文书
大雁塔导游词
2015/02/04 职场文书
贫困生证明范文
2015/06/16 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书
python的html标准库
2022/04/29 Python