浅析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 相关文章推荐
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
Dec 28 Javascript
javascript基于prototype实现类似OOP继承的方法
Dec 16 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
Jan 25 Javascript
基于JavaScript实现瀑布流布局(二)
Jan 26 Javascript
js实现砖头在页面拖拉效果
Nov 20 Javascript
详解JS中的立即执行函数
Feb 24 Javascript
javascript兼容性(实例讲解)
Aug 15 Javascript
js捆绑TypeScript声明文件的方法教程
Apr 13 Javascript
详解小程序输入框闪烁及重影BUG解决方案
Aug 31 Javascript
原生JS实现贪吃蛇小游戏
Mar 09 Javascript
vue.js实现双击放大预览功能
Jun 23 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实现中文字符截取防乱码方法汇总
2015/04/29 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
使用jquery动态加载javascript以减少服务器压力
2012/10/29 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python 实现归并排序算法
2012/06/05 Python
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
python连接oracle数据库实例
2014/10/17 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python 自动化表单提交实例代码
2017/06/08 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python中反射和描述器总结
2018/09/23 Python
老生常谈python中的重载
2018/11/11 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
如何用Python制作微信好友个性签名词云图
2019/06/28 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Linux中如何用命令创建目录
2015/01/12 面试题
公司节能减排方案
2014/05/16 职场文书
应届生面试求职信
2014/07/02 职场文书
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS