函数声明和函数表达式
- 函数声明:
fuction fn(){
console.log("test");
}
- 函数表达式:
var fn = fucntion(){
console.log("test");;
}
- 区别:函数声明可以在任何位置被调用。函数表达式需要在被执行完了后,才能被调用。
变量提升和函数提升
- 变量提升:当定义一个变量的时候,变量声明会被提升到前面。然后才被赋值。
var a = 10;
相当于
var a;
a = 10;
- 函数提升:当定义一个函数的时候,函数会自动提前。函数表达式不会被提前,只有函数声明会被提前。
test();//asd
fucntion test(){
console.log("asd");
};
argument
argument是函数参数的列表。是个类数组对象,但他并不是一个真正的数组。所以他只具备length属性。
可以通过一下语句进行转化:
var args=Array.prototype.slice.call(arguments)
函数重载的实现
- 可以通过argument.length来实现,根据length的不同,来执行不同的代码块。
- 可以通过if(){}来实现,根据形参的值,来执行不同的代码块。
立即执行函数表达式
(function(){})()
IIFE是函数在声明后立即执行,而且同时可以利用函数的作用域,可以避免全局变量的污染。第一个括号的作用是避免function被解析,让function(){}被当成表达式,立即执行。然后第二个括号就是调用函数。
用递归求n!
function rec(n){
if(n==1){
return 1;
}
return n*rec(n-1);
}