浅析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 相关文章推荐
用javascript操作xml
Nov 04 Javascript
初识javascript 文档碎片
Jul 13 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
qq悬浮代码(兼容各个浏览器)
Jan 29 Javascript
get(0).tagName获得作用标签示例代码
Oct 08 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
Dec 03 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
JS实现留言板功能
Jun 17 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
Dec 25 Javascript
js prototype和__proto__的关系是什么
Aug 23 Javascript
Vuex实现数据增加和删除功能
Nov 11 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
解析MySql与Java的时间类型
2013/06/22 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
php实现递归的三种基本方式
2020/07/04 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
JavaScript 继承的实现
2009/07/09 Javascript
JS 自定义带默认值的函数
2011/07/21 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
完美实现bootstrap分页查询
2015/12/09 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
在一个页面实现两个zTree联动的方法
2017/12/20 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
详解vue v-model
2020/08/31 Javascript
JS绘图Flot如何实现可选显示曲线图功能
2020/10/16 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python实现的密码强度检测器示例
2017/08/23 Python
Python实现图片尺寸缩放脚本
2018/03/10 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
运动会广播稿50字
2014/01/26 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
详解OpenCV曝光融合
2022/04/29 Python