浅析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 相关文章推荐
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
在浏览器中获取当前执行的脚本文件名的代码
Jul 19 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
Nov 04 Javascript
ES6中Symbol类型用法实例详解
Apr 06 Javascript
node vue项目开发之前后端分离实战记录
Dec 13 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
layui--js控制switch的切换方法
Sep 03 Javascript
浅谈vuex为什么不建议在action中修改state
Feb 02 Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 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跨域cookie共享使用方法
2014/02/20 PHP
php ci框架中加载css和js文件失败的解决方法
2014/03/03 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
php创建无限级树型菜单
2015/11/05 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
js用图作提交按钮或超连接
2008/03/26 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
JavaScript隐式类型转换代码实例
2020/05/29 Javascript
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
python环境下安装opencv库的方法
2020/03/05 Python
python线性插值解析
2020/07/05 Python
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
地理科学专业毕业生求职信
2013/10/15 职场文书
优秀员工个人的自我评价
2013/11/29 职场文书
军训教官感言
2014/03/02 职场文书
主持词开场白
2014/03/17 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书