1.函数表达式
函数可以使用函数表达式来创建,这样的函数可以是匿名的,函数表达式在把一个函数当做参数传递的时候很方便。
var getArea = function(sideLength){
return sideLength * sideLength;
}
var area = getArea(4); //area = 16
2.函数提升(function hoisting)是指函数的声明出现在调用之后,可以被提升,仅仅适用于函数声明,而不可以被用在函数表达式上。
3.嵌套函数和闭包(Nested functions and closures )
在JavaSript中,函数是允许嵌套的,嵌套(内部)函数对其容器函数(外部)函数是私有的,它自身也形成了一个闭包(closures)。在函数内部定义变量不使用var
修饰,定义的将会是全局变量。
闭包(closures)就是能够读取其他函数内部变量的函数。
由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
一个例子:
var object = {
name: "MyObject";
getNameFunc: function(){
console.log(this.name); //这里会输出"MyObject"
return function (){
console.log(this.name); //走到这句会显示错误:Cannot read property 'name' of undefined.
}
}
};
更正版本是这个样子:
var object = {
name: "MyObject";
getNameFunc: function(){
console.log(this.name); //这里会输出"MyObject"
var that = this;
return function (){
console.log(that.name); //这里会输出"MyObject"
}
}
};
4.arguments 对象
函数的实际参数都会被保存在一个类似数组的arguments对象中,在函数内可以使用arguments[i]
找到传入的参数,参数的数量由arguments.length
表示。
5.剩余参数(rest parameters)
剩余参数允许将不确定数量的参数表示为数组,在下面的例子中,使用剩余参数收集第三个到最后的参数。
function multiply(mutiplier1,mutiplier2,...theArgs) {
return theArgs.map(x => mutiplier1 * mutiplier2 * x); //map根据其后的函数处理,返回一个新数组
}
var arr = multiply(3,2,1,2,3);
console.log(arr); //输出显示[6,12,18]
6.扩展运算符(spread)
扩展运算符是三个点(...),好比是rest 的逆运算,将一个数组转为用逗号分隔的参数序列。
7.箭头函数(Arrow Functions)
ES6允许使用箭头=>定义函数,
var foo = v => v ;
在ES5里等价于
var foo = function(v){
return v;
}
如果箭头函数不需要参数或者需要多个参数,就使用()来代替参数部分。例如:
var foo = () => 5; //该函数返回值是 5
箭头函数代码块最好使用大括号并用return返回
var sum = (num1,num2) => {return num1 + num2};
由于大括号被解释为代码块,所以箭头函数直接返回一个对象,需要在大括号外面加上(),例如:
var foo = id => ({id:id,name:"Trump"})
箭头函数使用注意:
·函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
·不可以做构造函数
·不可以使用arguments对象,该对象在函数体内不存在,如果要使用,可以用Rest代替。
网友评论