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 相关文章推荐
DOM 基本方法
Jul 18 Javascript
JavaScript实现简单的时钟实例代码
Nov 23 Javascript
jquery $.trim()方法使用介绍
May 21 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
javascript中闭包(Closure)详解
Jan 06 Javascript
js点击返回跳转到指定页面实现过程
Aug 20 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
浅谈js中字符和数组一些基本算法题
Aug 15 Javascript
JS正则替换掉小括号及内容的方法
Nov 29 Javascript
jquery easyui dataGrid动态改变排序字段名的方法
Mar 02 Javascript
Javascript原生ajax请求代码实例
Feb 20 Javascript
javascript实现点击按钮切换轮播图功能
Sep 23 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中动态HTML的输出技术
2006/10/09 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
解决linux下node.js全局模块找不到的问题
2018/05/15 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python select.select模块通信全过程解析
2017/09/20 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python中的 enum 模块源码详析
2019/01/09 Python
谈谈Python中的while循环语句
2019/03/10 Python
python打造爬虫代理池过程解析
2019/08/15 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
在线课程:Skillshare
2019/04/02 全球购物
北京一家公司的.net开发工程师笔试题
2012/04/17 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
毕业生个人求职信范文分享
2014/01/05 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
2016年五四青年节校园广播稿
2015/12/17 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis
Python读取和写入Excel数据
2022/04/20 Python
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers