详细分析JavaScript函数定义


Posted in Javascript onJuly 16, 2015

函数

几个要点:

                a).函数是javascript中的一等公民 (重要性)
                b).函数是一个对象
                c).函数定义了一个独立的变量作用域

定义方式

a)命名函数:

          除非在另一个函数内部定义,否则,命名函数是全局的。 

// 全局的命名函数
  function add(x, y) {
    return x + y;
  }
  console.info(add(100, 200));  //300

b)匿名函数:   

            匿名函数通常赋值给一个变量,再通过变量调用。

var func = function (x, y) {
      return x + y;
    }
    console.info(func(5, 2)); //7

            匿名函数适用于以下这种 “立即执行的匿名函数” 的情况:

console.info(
      function (x, y) {
            return x + y;
          }(100, 200)  //立即调用
        );

C)定义方式影响代码执行效果

                命名函数可以先使用,再定义

console.info(sum(10, 10));
    function sum(num1, num2) {
      return num1 + num2;
    }

              匿名函数必须先定义,再使用

//console.info(sumFunc(10, 10));  //Uncaught TypeError: Property 'sumFunc' of object [object Object] is not a function 
    var sumFunc = function (num1, num2) {
      return num1 + num2;
    };
    console.info(sumFunc(10, 10));

函数返回值:

                 用return 生成返回值.如没有return ,则函数返回undefined

function func() {
 }
 console.info(func()); //undefined
 function func2() {
   return; //空的返回语句
 }
 console.info(func2()); //undefined

return里藏着的坑:

var func = function (x, y) {
   var sum = x + y;
   return {
     value : sum
   }
 }

                   这么写没有问题:   调用 func(5,5)    返回的是 Object {value: 10}

                   然而: 

var func = function (x, y) {
    var sum = x + y;
    return
    {
      value: sum
    };
  }
  console.info(func(5,5)); //undefined

                   return 后面跟着个回车换行的话,
                   调用 func(5,5)    显示的是 undefined
                   编辑器帮我们在return后加了个分号;   然而在这情况下并没有什么卵用。

函数即对象:

function add(x, y) {
    return x + y;
  }
  console.info(add(100, 200)); //300
  var other = add; //other和add引用同一函数对象
  console.info(other(300, 400)); //700
  console.info(typeof other);  //function
  console.info(add === other); //true

嵌套定义的函数:

                  在函数内部,可以定义另一个函数。

function outerFunc(a, b) {
    function innerFunc(x) {
      return x * x;
    }
    return Math.sqrt(innerFunc(a) + innerFunc(b));
  }
  console.info(outerFunc(3, 4)); //5

访问外部变量:

             内部函数可以访问外部的变量与参数。

var globalStr = 'globalStr';
 function outerFunc2(argu) {
   var localVar = 100;
   function innerFunc2() {
     localVar++;
     console.info(argu + ":" + localVar + ":" + globalStr);
   }
   innerFunc2(); //hello:101:globalStr
 }
 outerFunc2("hello");

返回函数的函数:

               因为函数是对象,所以可以作为返回值。

function outerFunc(x) {
    var y = 100;
    return function innerFunc() {
      console.info(x + y);
    }
  }
  outerFunc(10)(); //110

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
javascript实现单击和双击并存的方法
Dec 13 Javascript
JavaScript的事件代理和委托实例分析
Mar 25 Javascript
jquery按回车键实现表单提交的简单实例
May 25 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
Jun 27 Javascript
轮播图组件js代码
Aug 08 Javascript
分享JavaScript监听全部Ajax请求事件的方法
Aug 28 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
AngularJs每天学习之总体介绍
Aug 07 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
详解微信小程序开发聊天室—实时聊天,支持图片预览
May 20 Javascript
jQuery时间轴插件使用详解
Jul 16 #Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 #Javascript
Javascript函数的参数
Jul 16 #Javascript
Javascript简单改变表单元素背景的方法
Jul 15 #Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 #Javascript
JavaScript实现对下拉列表值进行排序的方法
Jul 15 #Javascript
jQuery简单实现验证邮箱格式
Jul 15 #Javascript
You might like
php 数组使用详解 推荐
2011/06/02 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
PHP二维索引数组的遍历实例分析【2种方式】
2019/06/24 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
JavaScript闭包详解
2015/02/02 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
vuejs如何配置less
2017/04/25 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
python学习 流程控制语句详解
2016/06/01 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
python中安装django模块的方法
2020/03/12 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
大学自我鉴定
2013/12/20 职场文书
英语生日邀请函
2014/01/23 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
策划总监岗位职责
2014/02/16 职场文书
就业意向书
2014/07/29 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
工作试用期自我评价
2015/03/10 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android