JS函数与闭包

箭头函数

用简洁的语法表达函数,箭头函数不能使用arguments、super、new.target,没有prototype属性

函数基本特性

函数名、参数、内部属性和方法

函数名

函数名是一个地址,指向函数。name属性包含该函数的名称

参数

参数在内部表现为一个数组,所以调用时参数不受数量和种类的约束。没有重载。

arguments对象

可以在非箭头函数内部调用,对象值为一个类似数组的对象。访问使用中括号形式argument[0.1.2] 可以看长度 argument.lenth

没有重载

如果定义另外一个同名函数的话,会导致函数的覆盖,所以没办法完成重载。

可以通过arguments判断变量类型数量的形式来模拟重载。

默认参数值

默认参数值在ES5的时候采用判断参数是否是undefined的方法,ES6能够显示的定义默认参数了。箭头函数也可以。

直接在函数定义时候用等号写在参数后面就能够实现默认参数值,默认参数值可以是函数返回值。

let romanNumerals = [‘I‘,‘II‘,‘III‘,‘IV‘,‘V‘,‘VI‘];
let ordinality = 0;
function getNumerals(){
	return romanNumerals[ordinality++];
}
//带有默认参数值的函数
function makeKing(name = ‘Henry‘, numerals=getNumerals()){
	return `King ${name} ${numerals}`;
}
console.log(makeKing()); //‘King Henry I‘
console.log(makeKing()); // ‘King Henry II‘

默认参数作用域

默认的参数会按照定义的顺序,在函数体内被初始化,下面的两个可以理解为一样。

function makeKing(name = ‘Henery‘, numerals = ‘VIII‘){
	return `King ${name} ${numerals}`;
}
function makeKing(){
	let name = ‘Henery‘;
	let numerals = ‘VIII‘;
}
  • 后面定义的默认参数可以引用前面的,因为是顺序初始化的。
  • 默认参数不能够引用函数体内的值,因为他们的作用域在外面。

扩展操作符

ES6新增扩展操作符,目的是为了让可迭代的变量拆分后,一个一个传进函数中。而不是直接传递整个数组。

let values = [1,2,3,4];
function getSum(){
	let sun = 0;
	for(let i = 0;i < arguments.length;++i){
		sum += argument[i];
	}
	return sum;
}
console.log(getSum(...values)); //10

函数声明和函数表达式

二者的区别在于,函数声明会被提升,而函数表达式在进行到该行时才能够定义函数。

闭包及私有变量

JS函数与闭包

上一篇:基于 Kubernetes 部署 Zookeeper,太有意思了!


下一篇:阿里云服务器购买和使用须知