浅析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和JQuery实用代码片段(一)
Apr 07 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
Jul 03 Javascript
script不刷新页面的联动前后代码
Sep 18 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
jquery easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
JS去除iframe滚动条的方法
Apr 01 Javascript
javascript原生ajax写法分享
Apr 10 Javascript
DWR中各种java方法的调用
May 04 Javascript
javascript函数中的3个高级技巧
Sep 22 Javascript
Webpack打包慢问题的完美解决方法
Mar 16 Javascript
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
Vue 实现可视化拖拽页面编辑器
Feb 01 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
PHP动态图像的创建
2006/10/09 PHP
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
理解JavaScript中的对象 推荐
2011/01/09 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
jQuery中appendTo()方法用法实例
2015/01/08 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Angular排序实例详解
2017/06/28 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
Python3.2中Print函数用法实例详解
2015/05/19 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
Python中的Numpy矩阵操作
2018/08/12 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
Diesel美国网上商店:意大利牛仔时装品牌
2020/12/10 全球购物
盛大二次面试题
2016/11/18 面试题
单位未婚证明范本
2014/01/18 职场文书
大学生党员承诺书
2014/05/20 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
杨善洲观后感
2015/06/04 职场文书
催款函范文
2015/06/24 职场文书
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python