浅析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 相关文章推荐
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
js 用CreateElement动态创建标签示例
Nov 20 Javascript
javascript闭包传参和事件的循环绑定示例探讨
Apr 17 Javascript
Bootstrap表单布局样式源代码
Jul 04 Javascript
jQuery过滤选择器经典应用
Aug 18 Javascript
详解vue.js全局组件和局部组件
Apr 10 Javascript
Vue仿支付宝支付功能
May 25 Javascript
JavaScript门道之标准库
May 26 Javascript
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
如何在JavaScript中优雅的提取循环内数据详解
Mar 04 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
微信小程序实现电子签名并导出图片
May 27 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 explode()函数用法、切分字符串
2012/10/03 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
2015/10/20 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
js常用函数 不错
2006/09/08 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
2016/05/17 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
一个简单的JavaScript Map实例(分享)
2016/08/03 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
Vue2.x中的父子组件相互通信的实现方法
2017/05/02 Javascript
PHP自动加载autoload和命名空间的应用小结
2017/12/01 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
Python3中的json模块使用详解
2018/05/05 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
python3结合openpyxl库实现excel操作的实例代码
2018/09/11 Python
详解Django的CSRF认证实现
2018/10/09 Python
python对Excel的读取的示例代码
2020/02/14 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
外科实习自我鉴定
2013/10/06 职场文书
11月红领巾广播稿
2014/01/17 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
安全生产承诺书
2014/03/26 职场文书
SpringRetry重试框架的具体使用
2021/07/25 Java/Android
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python