详细分析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 相关文章推荐
Javascript的闭包
Dec 31 Javascript
JS 文件大小判断的实现代码
Apr 07 Javascript
jQuery的12招常用技巧分享
Aug 08 Javascript
JavaScript代码复用模式实例分析
Dec 02 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
Dec 31 Javascript
谈谈JavaScript的New关键字
Aug 26 Javascript
javascript学习之json入门
Dec 22 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
垃圾回收器的相关知识点总结
May 13 Javascript
详解vue 兼容IE报错解决方案
Dec 29 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
Oct 26 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 n个不重复的随机数生成代码
2009/06/23 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
JQuery的html(data)方法与<script>脚本块的解决方法
2010/03/09 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
react-router实现跳转传值的方法示例
2017/05/27 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
使用python实现扫描端口示例
2014/03/29 Python
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
python输入错误后删除的方法
2019/10/12 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
数学检讨书1000字
2014/02/24 职场文书
销售主管竞聘书
2014/03/31 职场文书
2014年学校后勤工作总结
2014/12/06 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
暑假开始了,你的暑假学习计划写好了吗?
2019/07/04 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Django如何创作一个简单的最小程序
2021/05/12 Python
使用Ajax实现进度条的绘制
2022/04/07 Javascript
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers