在JavaScript中,函数和对象有区别,也有联系, 首先函数是一个对象,但是和对象存在一些区别如下:
1,不论在java还是js中,如果把一个对象赋值给另一个变量,那么,后者会指向前者对象所在的内存地址,这也就是所谓的引用类型
  例如:Java中创建一个Person类,存在一个name属性
    Person p1 = new Person();
    Person p2 = p1;
    那么会有p1和p2指向同一块内存地址,可以验证,假设对p2做赋值操作: p2.setName("xxx"),那么p1.getName()也会相应的被设置为"xxx",
  js中的对象和Java中的对象在此一致
  例如:js中
    var u1 = new Object();
    var u2 =  u1;
    u1.name="xxx";
    alert(u2.name);   //这里呈现的结果也是xxx
2,但是对于js中函数而言,却不是如上的结果,这也就是上面提到的js的函数是一个对象,但是和对象的区别
  举例: var fn1 = function(){
        alert("hello fn1");
      }
     var fn2 = fn1;
     fn1 = funtction(){
        alert("变化后的fn1");
      }
     fn1();//结果是:  变化后的fn1
     fn2();//结果是:  hello fn1
这个区别的原因要去分析内存模型:  对象是通过指向内存中的一块区域来完成对"引用"的指向, 函数是通过拷贝一块新的"引用"然后指向它来完成的指向 
 
JavaScript中定义函数的方式:共有三种
第一种方式:
function 函数名(){
  函数体;
}
第二种方式:
如下是函数的定义
function fn1(){}
在这里重新定义了一个变量fn2指向了fn1
var fn2 = fn1
fn1 = function(){
alert("aaa");

}
fn1();//值已经变了
fn2();//发现没有改变
 
如下是对象的定义
var o1 = new Object();
var o2 = o2;
o2.name = "aa"
alert(o1.name)://发现o1的name值也会改变
 

在这里就要提一下重载(首先声明: 函数在js中没有重载)

上例子:

function sum(num1,num2){

  return num1+num2;

}

function sum(num1){

  return num1+100;

}

sum(10);//结果毫无疑问: 110

sum(50,50);//结果是多少呢? 神奇的事情: 不是100,而是150

 
原因: 
var sum = function(num1,num2){ return num1+num2}
var sum = function(num1){return num1+100}
函数是对象,不存在重载,只存在覆盖,后面定义的,会覆盖前面定义的(这里就是出现上面神奇现象的原因)
有的童鞋要问,我传入的是两个参数的时候,既然,后面的函数覆盖了前面的函数,也就找不到匹配参数个数的函数了,为什么不报错呢?
函数的参数和调用没有关系, 如果函数只有一个参数,但是却传入了两个参数,仅仅只会匹配一个,多传了JS就当没有看见
 
函数的第三种定义方式
var o = new Object();
var fn = new Function(参数1,参数2,...,参数n,函数体);
var fn = new Function("num1","num2","alert(num1+num2)");
如上方式等于
function fn(num1,num2){
    alert(num1+num2);
}
通过这个例子,说明函数就是一个对象
注意,一定要多思考相应的内存模型: 函数的内存模型在内存中就是一个键值对
 
欢迎和小马哥一起交流:413939157(技术交流) 随便问问题

JavaScript面向对象(01)--函数的更多相关文章

  1. JavaScript面向对象之函数构造器的理解

    1,在使用函数创建类时,函数本身也被称为该类的构造器,该类的构造器方法,该类的构造方法,该类的构造函数等等. 2,注意构造器方法是没有返回值的,当创建该类的实例时,必须调用该类的构造方法. 3,获取构 ...

  2. javascript面向对象属性函数用法(defineProperty与getOwnPropertyDescriptor)

    defineProperty用于设置一个对象的属性描述符,属性描述符有4个:[[Configurable]], [[Enumerable]], [[Writable]],[[Value]] 当一个属性 ...

  3. javaScript系列 [01]-javaScript函数基础

    [01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...

  4. JavaScript进阶系列01,函数的声明,函数参数,函数闭包

    本篇主要体验JavaScript函数的声明.函数参数以及函数闭包. □ 函数的声明 ※ 声明全局函数 通常这样声明函数: function doSth() { alert("可以在任何时候调 ...

  5. 02.JavaScript 面向对象精要--函数

    在JavaScript中,函数其实也是对象.是函数不同于其他对象的特点是:函数存在一个被称为[[Call]]的内部属性.[[Call]]属性是函数独有的,表明该对象可以被执行.ECMAScript 定 ...

  6. JavaScript面向对象—基本数据类型和引用数据类型的区别和变量及作用域(函数和变量)

    基本类型和引用类型的值 ECMAScript 变量可能包含两种不同的数据类型的值:基本类型值和引用类型值. 基本类型值指的是那些保存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置. 而引用 ...

  7. JavaScript面向对象编程指南(三) 函数

    第3章 函数 3.1 什么是函数 函数:本质是一种代码的分组形式.函数的声明如下: <script type="text/javascript"> /*函数的声明组成: ...

  8. 19 01 12 javascript 定时器 封闭函数

    定时器 定时器在javascript中的作用1.制作动画2.异步操作3.函数缓冲与节流 定时器: setTimeout 只执行一次的定时器 clearTimeout 关闭只执行一次的定时器 setIn ...

  9. JavaScript面向对象的三大特性

    1.JavaScript面向对象的三大特性 JavaScript的三大特性:封装性.继承性.多态性. 2.JavaScript实现封装特性 在一些静态类型的语言如java中,本身语法就提供了这些功能. ...

随机推荐

  1. Eclipse集成Tomcat的配置步骤实例

    使用Eclipse开发B/S结构Web应用时,必须使用Web应用服务器,常见的应用服务器有Tomcat, Jboss, WebLogic, WebSphere, SUN System Applicat ...

  2. Java中的public、protected、default和private的区别

    (1)       对于public修饰符,它具有最大的访问权限,可以访问任何一个在CLASSPATH下的类.接口.异常等.它往往用于对外的情况,也就是对象或类对外的一种接口的形式. (2)      ...

  3. 【HDOJ】3901 Wildcard

    1. 题目描述有两个长度为$10^5$的字符串,其中一个仅包含小写字母,称之为源串:另一个包含?与*通配符的模式串,并且通配符的个数不超过10.求模式串是否能匹配源串? 2. 基本思路这其实是一道Re ...

  4. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  5. 无锁编程(四) - CAS与ABA问题

    CAS 一般采用原子级的read-modify-write原语来实现Lock-Free算法,其中LL和SC是Lock-Free理论研究领域的理想原语,但实现这些原语需要CPU指令的支持,非常遗憾的是目 ...

  6. Machine Learning for hackers读书笔记(八)PCA:构建股票市场指数

    library('ggplot2') prices <- read.csv('G:\\dataguru\\ML_for_Hackers\\ML_for_Hackers-master\\08-PC ...

  7. jQuery中filter(),not(),split()的用法

    filter(),not(): <script type="text/javascript"> $(document).ready(function() { //输出 ...

  8. MVC+Ef项目(4) 抽象业务逻辑层BLL层

    接下来,我们就要到业务逻辑层了,简单的说,业务逻辑层就是调用Repository(可以看做是DAL数据库访问层) 先来看看项目的架构 我们现在就开始来做BLL层.  同样,先编写  UserInfoS ...

  9. HDU 5358 First One 求和(序列求和,优化)

    题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...

  10. python练习程序(c100经典例19)

    题目: 一个数如果恰好等于它的因子之和,这个数就称为“完数”.例如6=1+2+3.编程找出1000以内的所有完数. def foo(a): sra=a; lis=[1]; while 1: for i ...