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 相关文章推荐
php跨域调用json的例子
Nov 13 Javascript
javascript中setTimeout的问题解决方法
May 08 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
谈谈JavaScript自定义回调函数
Oct 18 Javascript
jquery操作select元素和option的实例代码
Feb 03 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
彻底解决 webpack 打包文件体积过大问题
Jul 07 Javascript
微信小程序 自定义消息提示框
Aug 06 Javascript
vue devtools的安装与使用教程
Aug 08 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
Feb 15 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中加session验证)
2012/08/22 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
2013/09/28 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
Javascript typeof 用法
2008/12/28 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
jQuery选择器源码解读(三):tokenize方法
2015/03/31 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
node.js+jQuery实现用户登录注册AJAX交互
2017/04/28 jQuery
js实现随机点名小功能
2017/08/17 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python实现结构体代码实例
2020/02/10 Python
Python3 集合set入门基础
2020/02/10 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
Myholidays美国:在线旅游网站
2019/08/16 全球购物
校班主任推荐信范文
2013/12/03 职场文书
绩效管理实施方案
2014/03/19 职场文书
奠基仪式策划方案
2014/05/15 职场文书
找工作求职信
2014/07/07 职场文书