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 相关文章推荐
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
Feb 03 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
Aug 15 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
Nov 25 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
8个超实用的jQuery功能代码分享
Jan 08 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
使用express+multer实现node中的图片上传功能
Feb 02 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 Javascript
微信小程序实现搜索历史功能
Mar 26 Javascript
Vue 中使用富文本编译器wangEditor3的方法
Sep 26 Javascript
Vue 图片压缩并上传至服务器功能
Jan 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实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
提示$ is not defined错误分析及解决
2013/04/09 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
Node.js实用代码段之获取Buffer对象字节长度
2016/03/17 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
python入门教程之识别验证码
2017/03/04 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
python os.path模块常用方法实例详解
2018/09/16 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
30岁生日感言
2014/01/25 职场文书
超市采购员岗位职责
2014/02/01 职场文书
签约仪式主持词
2014/03/19 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
求职意向书范文
2014/04/01 职场文书
党委班子剖析材料
2014/08/21 职场文书
田径运动会通讯稿
2014/09/13 职场文书
运动会宣传语
2015/07/13 职场文书
社区宣传标语口号
2015/12/26 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python