JS--函数内部

E5和E6区别

ECMAScript 5 中,函数内部存在两个特殊的对象:arguments 和this。
ECMAScript 6 又新增了new.target 属性。
arguments:类数组对象;包含调用函数时传入的所有参数;只有以function 关键字定义函数它才会有。
经典的阶乘函数

function factorial(num) {
		if (num <= 1) {
		return 1;
		} else {
		return num * factorial(num - 1);
		}
		}
		var result=factorial(3);
		console.log(result);

以上定义耦合度较高。使用arguments.callee 就可以让函数逻辑与函数名解耦。

function factorial(num) {
if (num <= 1) {
return 1;
} else {
return num * arguments.callee(num - 1);
}
}
let trueFactorial = factorial;
factorial = function() {
return 0;
};
console.log(trueFactorial(5)); // 120

this

1.在标准函数和箭头函数中有不同的行为.
2.在标准函数中,this 引用的是把函数当成方法调用的上下文对象.

3.网页的全局上下文中调用函数时,this 指向windows.

window.color = 'red';
let o = {
color: 'blue'
};
function sayColor() {
console.log(this.color);
}
sayColor(); // 'red'
o.sayColor = sayColor;
o.sayColor(); // 'blue'

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

window.color = 'red';
let o = {
color: 'blue'
};
let sayColor = () => console.log(this.color);
sayColor(); // 'red'
o.sayColor = sayColor;
o.sayColor(); // 'red'

在对sayColor()的两次调用中,this 引用的都是window 对象,因为这个箭头函数是在window 上下文中定义的.
在事件回调或定时回调中调用某个函数时,this 值指向的并非想要的对象。此时将回调函数写成箭头函数就可以解决问题。这是因为箭头函数中的this 会保留定义该函数时的上下文.

function King() {
this.royaltyName = 'Henry';
// this 引用King 的实例
setTimeout(() => console.log(this.royaltyName), 1000);
}
function Queen() {
this.royaltyName = 'Elizabeth';
// this 引用window 对象
setTimeout(function() { console.log(this.royaltyName); }, 1000);
}
new King(); // Henry
new Queen(); // undefined

Queen,内部的函数this 引用window 对象,window对象是没有royaltyName属性的,目前这样理解。
函数名只是保存指针的变量.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值