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实现自定义标签
May 08 Javascript
对象特征检测法判断浏览器对javascript对象的支持
Jul 25 Javascript
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
javascript禁用Tab键脚本实例
Nov 22 Javascript
把字符串按照特定的字母顺序进行排序的js代码
Jan 28 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
用jmSlip编写移动端顶部日历选择控件
Oct 24 Javascript
关于javascript事件响应的基础语法总结(必看篇)
Dec 26 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
Mar 06 Javascript
webstorm中vue语法的支持详解
May 09 Javascript
vue component 中引入less文件报错 Module build failed
Apr 17 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 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之第五天
2006/10/09 PHP
php Ajax乱码
2008/04/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python爬虫中get和post方法介绍以及cookie作用
2018/02/08 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
季度思想汇报
2014/01/01 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
《燕子》教学反思
2014/02/18 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
2014年招生工作总结
2014/11/26 职场文书
学校重阳节活动总结
2015/03/24 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Mysql数据库group by原理详解
2022/07/07 MySQL