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 相关文章推荐
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
sails框架的学习指南
Dec 22 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
Sep 20 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
JavaScript驾驭网页-获取网页元素
Mar 24 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
详解使用create-react-app添加css modules、sasss和antd
Jul 31 Javascript
vue-router 前端路由之路由传值的方式详解
Apr 30 Javascript
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
vue.js路由mode配置之去掉url上默认的#方法
Nov 01 Javascript
jQuery 移除事件的方法
Jun 20 jQuery
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
yii框架中的Url生产问题小结
2012/01/16 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP学习笔记(三):数据类型转换与常量介绍
2015/04/17 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
PHP实现百度人脸识别
2019/05/06 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
vue实现按需加载组件及异步组件功能
2019/05/27 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
vue登录注册实例详解
2019/09/14 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
pandas实现选取特定索引的行
2018/04/20 Python
python爬虫之模拟登陆csdn的实例代码
2018/05/18 Python
Python列表元素常见操作简单示例
2019/10/25 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python代码注释规范代码实例解析
2020/08/14 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
某公司.Net方向面试题
2014/04/24 面试题
成人教育自我鉴定
2013/11/01 职场文书
个人综合鉴定材料
2014/05/23 职场文书
机电一体化毕业生自荐信
2014/06/19 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书