浅析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循环map功能的代码
Feb 26 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
Feb 23 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
javascript中的toFixed固定小数位数 简单实例分享
Jul 12 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
jQuery中:password选择器用法实例
Jan 03 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
Bootstrap实现登录校验表单(带验证码)
Jun 23 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 jQuery
js类的继承定义与用法分析
Jun 21 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
理解 JavaScript 预解析
2009/10/25 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
关于Ajax的原理以及代码封装详解
2017/09/08 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
JS实现密码框效果
2020/09/10 Javascript
Python实现一个简单的MySQL类
2015/01/07 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python提取页面内url列表的方法
2015/05/25 Python
Python 由字符串函数名得到对应的函数(实例讲解)
2017/08/10 Python
python 常用的基础函数
2018/07/10 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python学习--使用QQ邮箱发送邮件代码实例
2019/04/16 Python
结合OpenCV与TensorFlow进行人脸识别的实现
2019/10/10 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
keras实现多种分类网络的方式
2020/06/11 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
大学生职业生涯规划范文——找准自我,定位人生
2014/01/23 职场文书
《凡卡》教学反思
2014/04/09 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书