变量提升
var a=123;
function f(){
alert(a); //弹出为undefined
var a=1;
alert(a); //弹出为1
};
f();
函数域始终优先于全局域,所以局部变量a会覆盖掉所有与它同名的全局变量,尽管在alert()第一次被调用时,a还没有被正式定义,但该变量本身已经存在于本地空间了,这种特殊的现象叫做提升
当JavaScript执行过程进入新的函数时,这个函数内被声明的所有变量都会被移动(或者说是提升)到函数最开始的地方。这个概念很重要,必须牢记。另外需要注意,被提升的只有变量的声明,并不会赋给变量的值
函数也是数据
javascript中的函数也是一种数据,只不过这种特殊的数据类型有两个重要的特性
1.他们所包含的是代码
2.他们是可以执行的(或者是可调用的)
var f=function(){
return 1;
}
匿名函数
- 可以将匿名函数作为参数传递给其他函数
- 定义某个匿名函数来执行某些一次性任务。
回调函数
当我们将函数A传递给函数B,并有B来执行A时,A就成了回调函数,如果这时A还是一个无名函数,就称为匿名回调函数
function invokeAdd(a,b){
return a()+b();
};
什么时候使用回调函数
1.它可以在我们不做命名的情况下传递参数
2.我们可以将一个函数的调用操作委托给另一个函数
3.有助于提升性能回调示例
function multiplyByTwo(a,b,c,callback){
var i,
ar=[];
for(var i=0;i<3;i++){
ar[i]=callback(arguments[i]*2);
};
return ar;
};
function addOne(a){
return a+1;
};
//调用方式
multiplyByTwo(1,2,3,addOne);