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添加输出窗口的代码
Feb 07 Javascript
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
Mar 04 Javascript
js判断60秒以及倒计时示例代码
Jan 24 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
Apr 06 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
Dec 07 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
js表单元素checked、radio被选中的几种方法(详解)
Aug 22 Javascript
详解vue路由篇(动态路由、路由嵌套)
Jan 27 Javascript
原生js实现商品筛选功能
Oct 28 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 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版阿里云OSS图片上传类详解
2016/12/01 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
深入理解Python中的*重复运算符
2017/10/28 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
python验证身份证信息实例代码
2019/05/06 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
党员对照检查材料思想汇报
2014/09/16 职场文书
房产授权委托书范本
2014/09/22 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
结婚通知短信大全
2015/04/17 职场文书
初一军训感言
2015/08/01 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript
Python Django模型详解
2021/10/05 Python
MySQL数据库完全卸载的方法
2022/03/03 MySQL
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang