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 相关文章推荐
xmlHTTP实例
Oct 24 Javascript
JavaScript XML操作 封装类
Jul 01 Javascript
JavaScript学习历程和心得小结
Aug 16 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
jWiard 基于JQuery的强大的向导控件介绍
Oct 28 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 Javascript
js截取字符串的两种方法及区别详解
Nov 05 Javascript
js如何实现点击标签文字,文字在文本框出现
Aug 05 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
9个让JavaScript调试更简单的Console命令
Nov 14 Javascript
vue-router的HTML5 History 模式设置
Sep 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随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
php根据日期判断星座的函数分享
2014/02/13 PHP
thinkPHP模板中函数的使用方法示例
2016/11/30 PHP
PHP实现的随机红包算法示例
2017/08/14 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
IE6浏览器中window.location.href无效的解决方法
2014/11/20 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
JavaScript创建对象的方式小结(4种方式)
2015/12/17 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
Vue安装浏览器开发工具的步骤详解
2019/05/12 Javascript
Python编程中的异常处理教程
2015/08/21 Python
全面了解python字符串和字典
2016/07/07 Python
Python实现的质因式分解算法示例
2018/05/03 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python根据多个文件名批量查找文件
2019/08/13 Python
为什么称python为胶水语言
2020/06/16 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
就职演讲稿范文
2014/05/19 职场文书
学生保证书
2015/01/16 职场文书
辩论会主持词
2015/07/03 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
Promise面试题详解之控制并发
2021/05/14 面试题
python基础入门之普通操作与函数(三)
2021/06/13 Python
Python Pandas常用函数方法总结
2021/06/15 Python
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript