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 相关文章推荐
js 页面执行时间计算代码
Mar 04 Javascript
Javascript 异步加载详解(浏览器在javascript的加载方式)
May 20 Javascript
一个背景云变换js特效 鼠标移动背景云变化
Dec 28 Javascript
图片无缝滚动代码(向左/向下/向上)
Apr 10 Javascript
简单学习JavaScript中的for语句循环结构
Nov 10 Javascript
JavaScript ParseFloat()方法
Dec 18 Javascript
Node.js实现兼容IE789的文件上传进度条
Sep 02 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
JS Array.from()将伪数组转换成数组的方法示例
Mar 23 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 Javascript
three.js显示中文字体与tween应用详析
Jan 04 Javascript
React四级菜单的实现
Apr 08 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正则过滤html标签、空格、换行符的代码(附说明)
2010/10/25 PHP
PHP中PDO的错误处理
2011/09/04 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
jquery实现表格中点击相应行变色功能效果【实例代码】
2016/05/09 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
vue本地打开build后生成的dist文件夹index.html问题
2019/09/04 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
React Hooks 实现和由来以及解决的问题详解
2020/01/17 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
Python 异常处理实例详解
2014/03/12 Python
在python里从协程返回一个值的示例
2019/02/19 Python
python+opencv实现摄像头调用的方法
2019/06/22 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
面试自我评价范文
2014/09/17 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
2014年销售工作总结
2014/12/01 职场文书
护士求职简历自我评价
2015/03/10 职场文书
法律意见书范本
2015/06/04 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
MongoDB数据库之添删改查
2022/04/26 MongoDB