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 相关文章推荐
基于jQuery实现表格数据的动态添加与统计的代码
Jan 31 Javascript
Javascript学习笔记-详解in运算符
Sep 13 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
Oct 16 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
Sep 14 Javascript
3种js实现string的substring方法
Nov 09 Javascript
基于jQuery实现淡入淡出效果轮播图
Jul 31 Javascript
Boostrap实现的登录界面实例代码
Oct 09 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
Jan 20 Javascript
使用ajax的post同步执行(实现方法)
Dec 21 Javascript
vue组件与复用详解
Apr 08 Javascript
Vue中的组件及路由使用实例代码详解
May 22 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制作新闻系统的思路
2006/10/09 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
php学习之 数组声明
2011/06/09 PHP
PHP获取一个字符串中间一部分字符的方法
2014/08/19 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
设定php简写功能的方法
2019/11/28 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
2016/06/02 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
python实现京东秒杀功能
2018/07/30 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
基于Python实现简单学生管理系统
2020/07/24 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
党员培训思想汇报
2014/01/07 职场文书
新学期班主任寄语
2014/01/18 职场文书
商务考察邀请函范文
2014/01/21 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
清明节演讲稿
2014/05/27 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
学习张林森心得体会
2014/09/10 职场文书
创业计划书之美甲店
2019/09/20 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书