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 相关文章推荐
ext jquery 简单比较
Apr 07 Javascript
JavaScript实现快速排序的方法
Jul 31 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
jQuery EasyUI封装简化操作
Sep 18 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
May 02 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
Angular使用动态加载组件方法实现Dialog的示例
May 11 Javascript
js中的 || 与 && 运算符详解
May 24 Javascript
使用vue引入maptalks地图及聚合效果的实现
Aug 10 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
php学习 函数 课件
2008/06/15 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
PHP设计模式之调解者模式的深入解析
2013/06/13 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP asXML()函数讲解
2019/02/03 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
Code:findPosX 和 findPosY
2006/12/20 Javascript
JS图片预加载 JS实现图片预加载应用
2012/12/03 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
深入了解JS之作用域和闭包
2020/06/16 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
Python isinstance函数介绍
2015/04/14 Python
详解python字节码
2018/02/07 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
python跨文件使用全局变量的实现
2020/11/17 Python
Django实现简单的分页功能
2021/02/22 Python
2019史上最全Database工程师题库
2015/12/06 面试题
企业演讲稿范文
2013/12/28 职场文书
投资建议书模板
2014/05/12 职场文书
煤矿安全生产标语
2014/06/06 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技
在Docker容器中部署SQL Server
2022/04/11 Servers