javascript 用函数语句和表达式定义函数的区别详解


Posted in Javascript onJanuary 06, 2014

使用javascript多年,写过无数函数,今天却才真正弄明白两种函数定义的区别,真是悲剧,写下这个随笔, 以时刻提醒自己要打好基础 , 一大把年纪了, 不能继续懵懵懂懂了。

通常我们会看到以下两种定义函数的方式:

// 函数语句
function fn(str)
{
  console.log(str);
};
// 表达式定义
var fnx=function(str)
{
  console.log(str+ ' from fnx');
};

以前都是凭借自己手指的感觉随心所欲使用两者 -_- || ,今天看了js基础, 总算是解决了心中对他们的困惑:

两种方式都创建了新的函数对象, 但函数声明语句的函数名是一个变量名, 变量指向函数对象, 和通过var声明变量一样,函数定义语句中的函数被显示地提前到了脚本或函数的顶部, 因此它们在整个脚本和函数内都是可见的,但是使用var 表达式定义函数, 只有变量声明提前了,变量初始化代码仍然在原来的位置, 用函数语句创建的函数, 函数名称和函数体均被提前,所以我们可以在声明它之前就使用它。

代码例子如下:

   console.log(typeof(fn)); // function
    fn('abc'); // abc

    console.log(typeof(fnx)); // undefined
    if(fnx)
        fnx('abc');  // will not execute
    else
        console.log('fnx is undefined'); // fnx is undefined
    // 函数语句
    function fn(str)
    {
        console.log(str);
    };
    // 表达式定义
    var fnx=function(str)
    {
        console.log(str+ ' from fnx');
    };

代码很简单, 希望和我之前一样没有弄明白两者区别的同学能有所收获 。
Javascript 相关文章推荐
什么是JavaScript
Aug 13 Javascript
JS的参数传递示例介绍
Feb 08 Javascript
js操纵dom生成下拉列表框的方法
Feb 24 Javascript
jquery用data方法获取某个元素上的事件
Jun 23 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
Nov 16 Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 jQuery
JS图片预加载三种实现方法解析
May 08 Javascript
js数组中去除重复值的几种方法
Aug 03 Javascript
js形成页面的一种遮罩效果实例代码
Jan 04 #Javascript
JavaScript将数据转换成整数的方法
Jan 04 #Javascript
jquery.post用法关于type设置问题补充
Jan 03 #Javascript
JQuery处理json与ajax返回JSON实例代码
Jan 03 #Javascript
jquery.post用法示例代码
Jan 03 #Javascript
简单的代码实现jquery定时器
Jan 03 #Javascript
jquery将一个表单序列化为一个对象的方法
Jan 03 #Javascript
You might like
根德YB400的电路分析
2021/03/02 无线电
PHP strtok()函数的优点分析
2010/03/02 PHP
浅谈php和js中json的编码和解码
2016/10/24 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
使用jQuery实现的掷色子游戏动画效果
2014/03/14 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
jQuery实现元素拖拽并cookie保存顺序的方法
2016/02/20 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
[01:06:42]VP vs NewBee Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
python2.7的编码问题与解决方法
2016/10/04 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Python中的pathlib.Path为什么不继承str详解
2019/06/23 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
网络工程师自荐书范文
2014/04/01 职场文书
委托书模板
2014/04/04 职场文书
关于安全演讲稿
2014/05/09 职场文书
体育教师求职信
2014/06/30 职场文书
颐和园导游词
2015/01/30 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
八年级作文之友情
2019/11/25 职场文书
如何使用pdb进行Python调试
2021/06/30 Python