JavaScript中的函数实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上只是指向函数对象的指针,保存函数在堆内存中的地址值。

  1、定义函数的三种方式:

  1.1、函数声明方式

 function sum(num1, num2){
  return num1 + num2;
}

  1.2、函数表达式

 var sum = function(num1, num2){
return num1 + num2;
}

  1.3、使用Function构造函数,依次传入命名参数、函数体。这种方式不推荐使用,但这种方式便于我们理解函数名是指针,函数是对象。

 var sum = new Function("sum1", "sum2", "return sum1 + sum2");  //不推荐

  2、函数是对象,函数名是指针

  下面这两行代码如果你弄不懂有什么区别的话,就说明你对函数是对象,函数名是指针还不理解。第一行代码是把sum指向的function对象的地址值赋给anothersum,只是个赋值操作,sum函数并没有执行。关于这里,anothersum和sum对象是保存在栈内存中的,而function对象保存在堆内存中,anothersum和sum存的是function对象在堆内存中的地址值。这里第二行代码是执行sum函数,并把返回值赋值给another。由第二种函数的定义方式比较好区分它们。

 var anothersum = sum;
var anothersum = sum();

  3、为什么没有重载?

  将上面的两个方法转换成下面两个方法的写法,就能很好地理解为什么没有重载了,因为函数名只是个指向函数对象的指针,当定义第二个同名函数的时候,add指向了新的函数对象。

 function add(num){
return num + 100;
}
function add(num){
return num + 200;
} var add = function(num){
return num + 100;
} add = function(num){
return num + 200;
}; alert(add(50)); //

  4、函数声明与函数表达式的区别

  这两种定义函数的方式的区别在于解析器在向执行环境中加载数据的时候,解析器会率先读取函数声明,并使其在执行任何代码前有效,而函数表达式只有在解析器执行到它所在的代码行时才会执行。除了这个区别外这两种定义函数的方式是等价的。看下面这个例子

 alert(sum(10, 20));   //输出30
function sum(num1, num2){
return num1 + num2;
} alert(sum(10, 20)); //报错,sum is not a function,很明显函数表达式还没有被解析器读取到
var sum = function(num1, num2){
return num1 + num2;
}

  5、作为值、参数的函数,另外深入了解sort方法的比较器函数规则,按照数组元素的先后顺序进行比较,如果返回的是正数,则证明object1比object2大,负数相反,0相等,跟Java中Comparator接口的compare方法效果一样。

 function compare(propertyName){
return function(object1, object2){ //函数作为值返回
value1 = object1[propertyName];
value2 = object2[propertyName];
console.log(value1 + " " + value2);
if(value1 > value2){
return 1;
}else if(value1 < value2){
return -1;
}else{
return 0;
}
}
} var data = [{name:"zhangsan", age:23},{name:"lisi", age:25}];
var newData = data.sort(compare("name")); //把函数当做参数
console.log(newData[0].name);  //lisi

  这里把compare函数作为参数传递给了数组的sort函数,在compare函数的内部把函数作为值返回,compare函数可以根据你传入的对象属性进行排序。

  因为函数也是对象,所以它也有属性和方法,关于函数的属性和方法这里不做介绍,有个比较重要的属性prototype,以后再学习。

  

浅析JavaScript之Function类型的更多相关文章

  1. JavaScript之Function类型

    1. 创建方式 //1.函数声明 function sum(num1,num2){ return num1+num2; } //2.函数表达式 var sum = function(num1,num2 ...

  2. JavaScript高级 Function类型

    ·    Function类型 (属于引用类型) 1.JS中,有的函数均是对象,这个一个非常有特点的地方.它既然是对象,那么它的构造函数是谁呢?就是Function.(例如:function Pers ...

  3. JavaScript的Function 类型

    一,Function定义 Function实际上是对象,与其他引用类型一样具有属性和方法.Function可以通过三种方法进行定义,分别是函数声明语法定义,函数表达式定义和Function构造函数定义 ...

  4. JavaScript中的Function类型浅析

    1. Function类型是js中引用类型之一,每个函数实际上都是Function类型的实例对象,具有自己的属性和方法.正因为函数式对象,所以函数名实际上也是一个指向函数对象的指针. 2. 常用的函数 ...

  5. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  6. 《JavaScript高级程序设计》读书笔记 ---Function 类型

    说起来ECMAScript 中什么最有意思,我想那莫过于函数了——而有意思的根源,则在于函数实际上是对象.每个函数都是Function 类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对 ...

  7. JavaScript(第十天)【Function类型】

    在ECMAScript中,Function(函数)类型实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象 ...

  8. Javascript高级编程学习笔记(16)—— 引用类型(5) Function类型

    JS中许多有趣的地方都和函数脱不了联系 那么是什么让JS中的函数这么有趣呢? 我们一起来看看吧 Function类型 在JS中函数实际上就是对象,每个函数都是Function类型的实例,和JS的其他引 ...

  9. 《JavaScript高级程序设计》5.5 Function类型

    5.5 Function类型 函数实质上是对象, 每个函数都是Function类型的实例, 并且都和其他引用类型一样具有属性和方法. 因此函数名实际上也是一个指向函数对象的指针, 不会与某个函数绑定. ...

随机推荐

  1. 学习NAnt Build .CS+Solution+MSBuild+SVN+NUnit+NUnitReport

    NAnt help:http://nant.sourceforge.net/release/latest/help/tasks/NAntContrib help:http://nantcontrib. ...

  2. TLS学习总结

    我们有知道 Immunity Debugger,OD 调试器,在调试程序时会设断在OEP(修改第一个字节0xcc).我在想,使用什么编程技术,代码可以在OEP前被执行.在网上找了些资料,在论坛上看到许 ...

  3. 【ASP.Net MVC】AspNet Mvc一些总结

    AspNet Mvc一些总结 RestaurantReview.cs using System; using System.Collections.Generic; using System.Comp ...

  4. Keil RTX systick 初始化

    在STM32F215上移植Keil的RTX操作系统,随便设置下就能好使,但是当我想知道systick到底是怎么设置的时候,就得翻翻代码了,原来在 rt_HAL_CM.h中以一个内联函数的形式定义的 _ ...

  5. 旨在脱离后端环境的前端开发套件 - IDT之Server篇

    IDT,一个基于Nodejs的,旨在脱离后端环境的前端开发套件,目的就是能让前端开发完全脱离后端的环境,无论后端是什么模板引擎(主流),都能应付自如. IDT主要包括两大部分:Server + Bui ...

  6. 开源搜索引擎Solr的快速搭建及集成到企业门户最佳实施方案--转载

    笔者经过研究查阅solr官方相关资料经过两周的研究实现了毫秒级百万数据的搜索引擎的搭建并引入到企业门户.现将实施心得和步骤分享一下. 1.      jdk1.6 安装jdk1.6到系统默认目录下X: ...

  7. 3[doses] ------一种诡异的写法

    在 head first c 的第60页,有这么一道题: 一个富翁因为服药过度而死亡. 下面是自动服药器的代码: #include <stdio.h> int main(void) { , ...

  8. (转)8 reviews about de novo genome assembly

    转自:http://dskernel.blogspot.com/2012/04/8-reviews-about-de-novo-genome-assembly.html 8 reviews about ...

  9. 思考 ”前端开发人员都在关注的 GitHub 资源“

    点这里 原文: 资源 免费的计算机编程类中文书籍 免费编程书籍 计算机科学论文 codeparkshare Python初学者书籍.视频.资料.社区推荐 Python资料汇总 app应用推荐 码农周刊 ...

  10. Oracle MySQL

    http://blog.jobbole.com/46510/ http://blackproof.iteye.com/blog/1570456 http://blog.csdn.net/yzsind/ ...