函数
函数由函数名,参数,函数体和返回值构成,在没有返回值或返回值为void的情况下,javascript将默认返回值为undefined。
example:
>function f(){}
>f()
undefined
函数的三种形式:
非方法函数(普通函数):
>f()
直接调用
构造函数:
>new Date()
方法:
>obj.method();
将函数储存为对象的某个属性,然后通过对象调用函数的方法。
函数声明的方法:
普通方式:
function add(x,y){
return x+y;
}
具名函数:
var func=function (x,y){
return x+y;
}
具名函数通过func(x,y);来进行调用
函数构造器:
var add = new Function('x','y','return x+y');
call和apply方法的区别
相同点:
两个方法的作用完全一样:
fun.call(this,arg1,arg2,arg3)==fun.apply(this,arguments)==fun(arg1,arg2,arg3)
函数作用:可以通过设置第一个参数,可以动态地把一个函数加到其他任何对象上面。
call, apply方法区别是,从第二个参数起, call方法参数将依次传递给借用的方法作参数, 而apply直接将这些参数放到一个数组中再传递, 最后借用方法的参数列表是一样的。
注意:
在javascript中,不能传递参数的引用;因此,当我们将一个变量传递给函数时,变量的值会被复制一份并传递给函数,在函数中无法改变变量。
只有将变量包装到一个数组中,才能通过函数改变变量。
作用域
覆盖:
example:
var x="out";
function func(){
var x="in";
console.log(x); // in
}
console.log(x); // out
在非严格模式不通过var 将一个值赋给一个变量会产生全局变量:
example:
>function fun(){ x=123 }
>fun()
>x
123
IIFE:
(function(){ //open IIFE
// inside IIFE
}()); // close IIFE
作用:避免全局变量,隐藏全局作用域的变量,创建新的环境,避免共享,保持数据的相对独立。
闭包:函数可以维持其创建时所在的作用域