文档章节

JavaScript中的Function类型

 前端小谢
发布于 2016/11/23 10:33
字数 880
阅读 8
收藏 0

主要内容:

    1.函数的声明方式

    2.作为值的函数

    3.函数的内部属性

    4.函数的属性和方法

Function(函数)类型实际上是对象,每一个函数都是Function类型的实例,而且都与其他类型一样具有属性和方法,即函数就是对象

function fn(){}
var obj = {}
console.log(fn instanceof Function)//true
console.log(obj instanceof Object)//true
console.log(fn instanceof Object)//true
console.log(obj instanceof Function)//false
前面两个打印的效果,大家都容易理解.后面 fn instanceof Object 是为true.
这里也是一样,从函数的定义来说: 在javascript中一切函数实际都是函数对象. 
所以为true就不奇怪了.obj instanceof Function 为false,当然不奇怪了.因为他是一个对象,不是函数.

1.函数的声明方式

1.普通声明方式

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

2.使用变量初始化函数

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

2.作为值的函数

   javascript中函数本身也是一个变量,可以把函数作为参数传递给另一个函数,换可以将一个函数作为另一函数的结果返回


function box(sumfun,num){
  return fun(num);
}
function fun(num){
 return num+10;
}

alert(box(fun,10));

3.函数的内部属性

    在函数内部,有两个特殊的对象:arguments和this。arguments是一个类数组对象,包含着传入函数中的所有参数,主要用途是保存函数参数。但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数

function box(num){ 
if(num<=1){ 
return 1; }else{ 
return num*box(num-1); //一个简单的的递归 
} 
}
对于阶乘函数一般要用到递归算法,所以函数内部一定会调用自身;如果函数名不改变是没有问题的,但一旦改变函数名,
内部的自身调用需要逐一修改。为了解决这个问题,我们可以使用arguments.callee来代替。 
function box(num){ 
if(num<=1){ 
return 1; }else{ 
return num*arguments.callee(num-1);//使用callee来执行自身 } 
} 
函数内部另一个特殊对象是this,其行为与Java和C#中的this大致相似。换句话说,this引用的是函数据以执行操作的对象,
或者说函数调用语句所处的那个作用域

4.函数的属性和方法

   在JavaScript中函数是一个对象,所以函数也有属性和方法,每个函数都包含两个属性length和prototype.其中length属性表示希望函数接收命名参数的个数。

function sum(num1,num2){
				return num1+num2;
			}
			alert(sum.length);//2个参数

对于prototype属性,它是保存所有实例方法的真正所在,也就是原型。而prototype下有两个方法:apply()和call(),每个函数都包含这两个非继承而来的方法。这两个方法的用途都在特定的作用域中调用函数,实际上等于设置函数体内this对象的值。

function box(num1,num2){ 
				return num1+num2; //原函数 
			} 
			function sayBox(num1,num2){ 
			 return box.apply(this,[num1,num2]); //this表示作用域,这里是window []表示box所需要的参数 
			   
			}										 
														
			function sayBox2(num1,num2){ 
			return box.apply(this,arguments); //arguments对象表示box所需要的参数 
			} 
			alert(sayBox(10,10)); //20  
			alert(sayBox2(10,10));//20
var color='红色的'; //或者window.color='红色的';也行
					 var box={ 
						color:'蓝色的' 
						}; 
				 function sayColor(){
				 	 alert(this.color); 
					} 
				sayColor(); //作用域在window 
				sayColor.call(this); //作用域在window 
				sayColor.call(window); //作用域在window 
				sayColor.call(box); //作用域在box,对象冒充 

 

© 著作权归作者所有

粉丝 5
博文 36
码字总数 10963
作品 0
程序员
私信 提问
关于javaScript的认识

NaN与Infinity和-Infinity不同的是,NaN不会与任何数值变量相等,可以用javaScript专门提供的isNaN()函数来判断某个变量是否为NaN。 Undefined类型的值只有undefined一个,该值用于表示某个变...

杨松坤
2012/05/09
223
0
判断javascript数组的方法

判断javascript数组的方法 var is_array=function(){ return value && } 我们知道,javascript是一种弱类型的语言,并且,javascript中的一切实质上都是对象。那么,在javascript中如何进行对...

首席xx师
2013/06/06
100
2
细说JavaScript数据类型及转换

细说JavaScript数据类型及转换 JavaScript数据类型 1.Boolean(布尔) 布尔:(值类型)var b1=true;//布尔类型 2.Number(数字) 数值:(值类型)var n1=3.1415926;//数值类型 n1.toFixed...

开元中国2015
2015/07/13
99
1
JavaScript的简单复习

JavaScript的简单复习 JS的两种加载方式: 1.内部加载 内部加载,写在<script>标签内部 2.外部加载 写在<script>的src目录中,使用外部加载js文件的时候,js解析引擎不解析script标签体中的代码...

Lunqi
2015/08/07
62
0
jQuery验证框架(一) 可选项 (jQuery validation)

jQuery验证框架 Html代码 <script type="text/javascript" src=js/jquery-1.3.2.min.js></script> <script type="text/javascript" src=js/jquery.validate.pack.js></script> <script type......

打杂
2010/11/16
14.3K
5

没有更多内容

加载失败,请刷新页面

加载更多

搭建高可用MongoDB集群(分片)

搭建高可用MongoDB集群(分片) MongoDB基础请参考:https://blog.51cto.com/kaliarch/2044423 MongoDB(replica set)请参考:https://blog.51cto.com/kaliarch/2044618 一、概述 1.1 背景 ......

linjin200
27分钟前
5
0
CDH6.0.1集成tez-0.9.1计算引擎

参考文章: https://www.jianshu.com/p/9fb9f32e1f0f https://www.baidu.com/link?url=OgpwasnZi7H1dySN2T111sseEWDBaCCTC3DFV61G7756YbrkJCA8Y3UFaueyqnfN&wd=&eqid=daeb8b3500049cf3000000......

Sheav
29分钟前
4
0
Vue内置指令的使用

v-model(数据绑定) v-model常用于表单数据的双向绑定,它本质上是一个语法糖。它主要的有两种应用: 在文本框、多行文本、input的下拉框、单选按钮、复选框中的应用 <div id="app"> ...

凌兮洛
30分钟前
5
0
外部来源应用检查-烦死了,终于找到解决设置了

Android 连接usb调试应用的时候: 华为关闭方法:1、设置-安全-更多安全设置,关掉外部来源应用检查。2、设置-系统-开发人员选项-关闭“监控ADB安装应用” 不知道OPPO 怎么关闭的?...

QGlaunch
31分钟前
4
0
6个K8s日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人,目前采集客户端 logtail 在集团百万规模部署,每天采集上万应用数 PB 数据,经历多次双 11、双 12 考验。 导读:随着 K8s 不断更新迭代,使...

阿里云官方博客
33分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部