红宝书阅读笔记!第五天_函数(2)

111 阅读1分钟

函数内部

ECMAScript5中函数内部有两个特殊的对象:argumentthis

ECMAScript6中又新增了new.target属性。

1.arguments

arguments是一个类数组对象,包含调用函数传入的所有参数。这个对象只有以function关键字定义函数时才会有。arguments对象还有一个callee属性,是指向arguments 对象所在函数的指针。用途是,可以让函数逻辑和函数名接触耦合。

function factorial(num){
	if(num <=1){
    return 1;
    }
    else {
    return num*arguments.callee(num - 1);
    }
}

虽然是递归函数,但是函数内部引用和函数名无关。

2.this

this在标准函数和箭头函数中有不同的行为。

在标准函数中,this引用的是把函数当成方法调用上下文的对象。全局使用时,this指向window。

在箭头函数中,this引用的是定义箭头函数的上下文。

this关键字也不止在函数中,更多也可以点击这里✌

3.caller

我用不上

4.new.target

检测函数是否被new关键词调用。

函数属性和方法

ECMAScript中的函数是对象,因此有属性和方法。每个函数都有两个属性lengthprototype

1.length

length表示函数命名时参数的个数。

2.prototype

prototype中保存着引用类型所有实例方法的地方,比如toString()valueOf()等。

3.apply() call()

这两个方法主要用在控制函数调用上下文即函数体内this值的能力。

window.color = 'red';
let o = {
	color:'blue';
}

function sayColor(){
	console.log(this.color);
}

sayColor();			// red

sayColor.call(this);		//red
sayColor.call(window);		//red
sayColor.call(o);		//blue
文章内容参考:JavaScript高级程序设计(第四版)

标题样式来自:juejin.cn/post/684490…

哪里写错了就联系我🐧:54269504