浅析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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
JS window.opener返回父页面的应用
Oct 24 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
使用不同的方法结合/合并两个JS数组
Sep 18 Javascript
js实现照片墙功能实例
Feb 05 Javascript
JavaScript获取URL汇总
Jun 08 Javascript
JavaScript动态提示输入框输入字数的方法
Jul 27 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
Jan 25 Javascript
使用vue2.0创建的项目的步骤方法
Sep 25 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
Jun 06 jQuery
vue实现Toast组件轻提示
Apr 10 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
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
vue使用Sass时报错问题的解决方法
2020/10/14 Javascript
原生js实现弹幕效果
2020/11/29 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
windows下python和pip安装教程
2018/05/25 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Pandas0.25来了千万别错过这10大好用的新功能
2019/08/07 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python读取mysql数据绘制条形图
2020/03/25 Python
Python通过文本和图片生成词云图
2020/05/21 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
腾讯公司的一个sql题
2013/01/22 面试题
个人对照检查材料思想汇报(四风问题)
2014/09/25 职场文书
接待员岗位职责
2015/02/13 职场文书
自考生自我评价
2019/06/21 职场文书