浅析javascript中函数声明和函数表达式的区别


Posted in Javascript onFebruary 15, 2015

javascript中声明函数的方法有两种:函数声明式和函数表达式.

区别如下:

1).以函数声明的方法定义的函数,函数名是必须的,而函数表达式的函数名是可选的.

2).以函数声明的方法定义的函数,函数可以在函数声明之前调用,而函数表达式的函数只能在声明之后调用.

3).以函数声明的方法定义的函数并不是真正的声明,它们仅仅可以出现在全局中,或者嵌套在其他的函数中,但是它们不能出现在循环,条件或者try/catch/finally中,而

    函数表达式可以在任何地方声明.

下面分别用两种方法定义函数:

 //函数声明式

 function greeting(){

       console.log("hello world");  

 }

 //函数表达式

 var greeting = function(){

     console.log("hello world"); 

 }

下面一个有趣的javascript:

 function f() { console.log('I am outside!'); }

 (function () {

   if(false) {

     // 重复声明一次函数f

     function f() { console.log('I am inside!'); }

   }

   f();

 }());

会输出什么呢?第一反应应该是"I am outside"吧.  结果在chrome中输出"I am inside",IE11直接报错,firefox低一点的版本输出"I am outside"...

chrome输出的结果很明确的反应了用函数声明式声明的函数的特点--函数在声明之前就可以调用.

IE报错显示缺少对象,因为函数声明在了条件里,违背了函数声明式的原则.

函数表达式的作用域:

如果函数表达式声明的函数有函数名,那么这个函数名就相当于这个函数的一个局部变量,只能在函数内部调用,举个栗子:

 var f = function fact(x) { 

                 if (x <= 1) 

                     return 1;

                 else 

                     return x*fact(x-1);

                 };

                 alert(fact());   // Uncaught ReferenceError: fact is not defined

fact()在函数内部可以调用,在函数外部调用就会报错:fact未定义

以上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jQuery 性能优化手册 推荐
Feb 23 Javascript
js将long日期格式转换为标准日期格式实现思路
Apr 07 Javascript
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
模拟一个类似百度google的模糊搜索下拉列表
Apr 15 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
JavaScript中 DOM操作方法小结
Apr 25 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
不同编码的页面表单数据乱码问题解决方法
Feb 15 #Javascript
浅谈javascript中this在事件中的应用
Feb 15 #Javascript
javascript使用正则表达式实现去掉空格之后的字符
Feb 15 #Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 #Javascript
Linux下编译安装php libevent扩展实例
Feb 14 #Javascript
jQuery中extend函数详解
Feb 13 #Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
Feb 13 #Javascript
You might like
PHP 批量更新网页内容实现代码
2010/01/05 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
php数组删除元素示例
2014/03/21 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
jquery实现在光标位置插入内容的方法
2015/02/05 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
python测试驱动开发实例
2014/10/08 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
中专生学习生活的自我评价分享
2013/10/27 职场文书
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
高中军训感言600字
2014/03/11 职场文书
理想演讲稿范文
2014/05/21 职场文书
期末个人总结范文
2015/02/13 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
外出考察学习心得体会
2016/01/18 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
python 爬取天气网卫星图片
2021/06/07 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android
MySQL分区路径子分区再分区
2022/04/13 MySQL