Function 类型

函数内部属性

任何函数内部,都有两个特殊的对象,arguments 和 this。arguments为数组对象,包含传递的所有参数。this是它所处对象的作用域。

callee 属性

是 arguments 对象的一个成员,它表示对函数对象本身的引用,这有利于匿名函数的递归或者保证函数的封装性

// 打印函数自身
function calleeDemo() {
    console.log(arguments.callee);
}
// 用于匿名函数的递归调用
var sum = function(n){
  if (n <= 0)  return 1;
  else return n + arguments.callee(n - 1)
}

比较一般的递归函数:

var sum = function(n){
    if (1==n) return 1;
    else return n + sum (n-1);
}
调用时:alert(sum(100));

在浏览器(客户端)中,window对象是js中最大的对象,也是最外围的。所有全局的变量都是window的属性。

apply and call

两者都是把函数绑定到另外的一个作用域下面,区别仅仅在于参数,

apply(thisArg,argArray);// 第一个参数是作用域,
call(thisArg,[arg1,arg2…]); //第一个参数是作用域,第二个参数是一个数组

function add(a,b)  
{  
    alert(a+b);  
}  
function sub(a,b)  
{  
    alert(a-b);  
}  

add.call(sub,3,1);  //4  用 add 方法替换 sub 方法,this 指向 sub。
add.apply(sub, [3,1]); // add参数为数组  
// 函数其实是一个对象,所以可以通过add.call 的方式调用属性。

常用的用法:
1. 查找数组里面最大的值(apply)
当数组中的元素不便一一列举或数组很大时 apply 方法很有用
Math.max.apply(null, [array]);

注: 当不把该函数指定到其它作用域下的时候,所以第一个参数可以写作null或者本身。
2. 判断数据的详细类型(call) 优点:更详细
Object.prototype.toString.call(value);// 返回的是 string 类型

可以准确的判断出8种数据类型和其它的js 原生类型。
比如会有 [object Date]
但是typeof 只会判断为 object。

使用typeof运算符的缺点是: null, array,Date等原生数据类型会判断为 object 类型, 并且返回的是 string 类型
console.log(typeof (typeof function(){})) // string

使用 instanceof 只能判断一个实例是不是属于一个对象

console.log(d instanceof Date());
var d = new Date();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值