浅析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实现居中弹出层代码
Aug 25 Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 Javascript
javascript测试题练习代码
Oct 10 Javascript
前端微信支付js代码
Jul 25 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
vue左右侧联动滚动的实现代码
Jun 06 Javascript
JS高阶函数原理与用法实例分析
Jan 15 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
Sep 04 Javascript
通过原生vue添加滚动加载更多功能
Nov 21 Javascript
Vue.js实现大屏数字滚动翻转效果
Nov 29 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缓存技术详细总结
2013/08/07 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
基于Jquery的简单图片切换效果
2011/01/06 Javascript
JsDom 编程小结
2011/08/09 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
vue组件间通信解析
2017/03/01 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
利用JS实现一个同Excel表现的智能填充算法
2018/08/13 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
6种JavaScript继承方式及优缺点(小结)
2020/02/06 Javascript
Python利用多进程将大量数据放入有限内存的教程
2015/04/01 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python3 合并二叉树的实现
2019/09/30 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python语言是免费还是收费的?
2020/06/15 Python
Python如何合并多个字典或映射
2020/07/24 Python
python中str内置函数用法总结
2020/12/27 Python
实习期自我鉴定
2013/10/11 职场文书
售后主管岗位职责
2013/12/08 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
2014年维稳工作总结
2014/11/18 职场文书
欢送会主持词
2015/07/01 职场文书
酒店开业主持词
2015/07/02 职场文书