js的一等公民–函数
js函数的特性
为啥叫一等公民呢,js的创建者更偏爱于面向过程的c类似的语言,创建js是老大安排的做的,而面向过程主要是函数(或者叫方法),于是函数被创建者赋予了基本上其他基本类型的大多功能。
-
函数是一个数据类型
函数和js中Number、String、Boolean、Object这些都是作为js的基本数据类型。如果你用typeof一个函数类型的函数名,会返回“function”。但不同与其他类型,函数可以通过
()
执行函数内容。 -
函数是一个独立的作用域
只在函数内声明的变量不会被外部访问到。
example
<script> var a = 2; function f(){ var a = 1; } console.log(a);//结果为2 </script>
-
函数可以当做对象去使用
对象具有的很多操作函数都有(作为一个参数、返回值…)。
example
<script> function f(fn){ return fn; } var fn = function(){ console.log("function"); } f(fn)(); </script>
函数的定义
有三种,如下:
<script>
//1.定义式(有名函数)
function fn(param1,...paramn){
//执行的内容
}
//2.表达式(匿名函数)
var fn = function(param1,...paramn){
//执行的内容
}
//3.想对象一样创建,很少用,性能低
var fn = new Function();
</script>
函数的参数和返回值
arguments.callee
返回拥有arguments对象的函数。
js没有重载这个东西,函数的参数是不定的,可以通过arguments这个对象获取到实际的参数 和传入的参数。函数默认返回值是undefined,可以通过return返回其他的值。
example
<script>
function fn(a,b){
console.log("实际传入的参数个数:"+arguments.length);
console.log("函数要求传入的参数个数:"+arguments.callee.length);
console.log("函数的第一个参数:"+arguments[0]);
}
fn(1,2,3);
</script>
回调函数
example
<script>
function fn(callback){
callback();
}
fn(function(){
console.log(1);
});
//结果控制台输出1
</script>