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调用CS里的带参方法实例
Aug 01 Javascript
jquery提交form表单时禁止重复提交的方法
Feb 13 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
微信内置浏览器私有接口WeixinJSBridge介绍
May 25 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
基于JavaScript如何制作遮罩层对话框
Jan 26 Javascript
Java  Spring 事务回滚详解
Oct 17 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
深入浅析vue中cross-env的使用
Sep 12 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
自动把纯文本转换成Web页面的php代码
2009/08/27 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
PyMongo安装使用笔记
2015/04/27 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
AmazeUI 缩略图的实现示例
2020/08/18 HTML / CSS
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
大学生求职推荐信
2013/11/27 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
python 逐步回归算法
2021/04/06 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL