详细分析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 相关文章推荐
jquery.validate使用攻略 第二部
Jul 01 Javascript
JavaScript中数组对象的那些自带方法介绍
Mar 12 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
js实现右下角提示框的方法
Feb 03 Javascript
JavaScript中的this关键字使用详解
Aug 14 Javascript
jquery实现定时自动轮播特效
Dec 10 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
Angular通过指令动态添加组件问题
Jul 09 Javascript
JavaScript箭头函数中的this详解
Jun 19 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 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 zend解密软件绿色版测试可用
2008/04/14 PHP
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
php session劫持和防范的方法
2013/11/12 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
session 加入redis的实现代码
2016/07/15 PHP
万能的php分页类
2017/07/06 PHP
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
一个实用的图片切换支持点击切换和自动轮播
2014/09/09 Javascript
JavaScript中的console.profile()函数详细介绍
2014/12/29 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
JavaScript实现网页跨年倒计时
2020/12/02 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python回调函数用法实例分析
2015/05/09 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
pip命令无法使用的解决方法
2018/06/12 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
htnl5利用svg页面高斯模糊的方法
2018/07/20 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
体操比赛口号
2014/06/10 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
同学聚会祝酒词
2015/08/10 职场文书
MySQL分区以及建索引的方法总结
2022/04/13 MySQL