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 相关文章推荐
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
html+css+js实现xp window界面及有关功能
Mar 26 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
Express框架之connect-flash详解
May 31 Javascript
vue-quill-editor实现图片上传功能
Aug 08 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
vue使用recorder.js实现录音功能
Nov 22 Javascript
JavaScript实现简单计算器功能
Dec 19 Javascript
JavaScript对象原型链原理解析
Jan 22 Javascript
Jquery+javascript实现支付网页数字键盘
Dec 21 jQuery
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抓即时股票信息
2006/10/09 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
十大使用PHP框架的理由
2015/09/26 PHP
PHP如何使用Memcached
2016/04/05 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
2010/02/09 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
jquery 提交值不为空的元素示例代码
2013/05/10 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
JavaScript中的getMilliseconds()方法使用详解
2015/06/10 Javascript
实例详解Nodejs 保存 payload 发送过来的文件
2016/01/14 NodeJs
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
Python2.7读取PDF文件的方法示例
2017/07/13 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
pygame实现俄罗斯方块游戏(基础篇2)
2019/10/29 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Python 如何查找特定类型文件
2020/08/17 Python
python中pickle模块浅析
2020/12/29 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
护士自我评价
2014/02/01 职场文书
金融事务专业求职信
2014/04/25 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
重温入党誓词主持词
2015/06/29 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL