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 相关文章推荐
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
Javascript毫秒数用法实例
Feb 05 Javascript
JQuery实现Ajax加载图片的方法
Dec 24 Javascript
js实现不重复导入的方法
Mar 02 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
jQuery实现模糊搜索功能的方法分析
Jun 29 jQuery
vue.js实现三级菜单效果
Oct 19 Javascript
js回调函数仿360开机
Dec 26 Javascript
简单了解前端渐进式框架VUE
Jul 20 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
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
用vue封装插件并发布到npm的方法步骤
2017/10/18 Javascript
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
python实现用于测试网站访问速率的方法
2015/05/26 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
python多线程方式执行多个bat代码
2016/06/07 Python
python生成excel的实例代码
2017/11/08 Python
python中pylint使用方法(pylint代码检查)
2018/04/06 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python实现批量修改文件名
2020/03/23 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
天鹅的故事教学反思
2014/02/04 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
电话客服工作职责
2014/07/27 职场文书
市级三好学生评语
2014/12/29 职场文书
增值税发票丢失证明
2015/06/19 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python