浅析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 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
node.js路径处理方法以及绝对路径详解
Mar 04 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
Oct 14 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
Aug 28 Javascript
详解VueRouter进阶之导航钩子和路由元信息
Sep 13 Javascript
JS简单获取并修改input文本框内容的方法示例
Apr 08 Javascript
js实现搜索栏效果
Nov 16 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 Javascript
vue组件传值的实现方式小结【三种方式】
Feb 05 Javascript
不同编码的页面表单数据乱码问题解决方法
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数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
如何用php获取文件名后缀
2013/06/09 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
jQuery制作简单柱状图实例
2015/01/28 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
js实现批量删除功能
2020/08/27 Javascript
Python实现字典的遍历与排序功能示例
2017/12/23 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
python 将字符串完成特定的向右移动方法
2019/06/11 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
家长给孩子的表扬信
2014/01/17 职场文书
消费者投诉书范文
2015/07/02 职场文书
经典爱情感言
2015/08/03 职场文书
导游词之太原天龙山
2020/01/02 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
Python中文纠错的简单实现
2021/07/07 Python
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS