函数定义的三种方式:
1.函数声明
函数 添加(i,j){
返回 i+j;
}
函数声明的特点:
1)函数定义会放在前面;
2)重复定义函数时,最后一次定义的函数有效。
2. 函数表达式
var add=函数(i,j){
返回 i+j;
}
3。函数实例化
var add=new 功能("i", "j","返回( i+j)");
添加(2,3);
函数实例化的特点:定义的函数只能访问局部作用域和全局作用域。
函数声明的特点:
1. 函数调用可以在函数定义之前执行,函数定义位于最上面
函数表达式:
函数调用在函数定义之前报错,函数定义在最前面。函数未定义。 (但是用Firebug调试执行正常,可能是因为Firebug修改了底层)
添加(1,2);
函数 添加(i,j){
返回i+j;
}//3add(1,2);
var add=函数(i,j){
返回i+j;
} //添加是不是一个函数(…)
函数声明 为什么可以在定义函数之前调用函数?
函数执行顺序:
添加(1);功能 添加(i){
console.log(i+1);
}
var add2=函数(i){
console.log(i+2);
添加2(1);
var add3=新功能(“i” )
add3(1);
实际执行顺序:
函数声明:函数定义将移至顶部。
由函数表达式和函数实例化定义的函数:变量声明移至顶部,变量赋值保留在原来的位置。
var添加2;
var添加3;
函数 添加(i){console.log(i+1);}
添加(1);
add2=函数(i){console.log(i+2);}
add2(1);
add3=新 功能("i")
add3(1);
2。函数声明:当函数被重复定义时,函数声明执行最后定义的函数。
函数表达式和函数实例化的重复定义不受影响。
功能 add1(i){console.log() “函数声明:”+(i+1)) ;}add1(1);//11var add2 = 函数(i){console.log("函数表达式: "+(i+2));}add2(1);//3var add2 = 函数(i) { console.log("函数表达式:"+(i+20));}add2(1);//21函数add1(i){console.log("函数声明:"+(i+10));}
add1(1);//11var add3 = new 函数 ("我", "console.log('函数实例化:'+(i+3));");add3(1);//4var add3 = 新 功能("i","console.log('函数实例化:'+(i+30)); ");add3(1);//31
如果用几种定义函数的方式重复定义一个函数,那么该函数将如何执行?
函数 add1(i){console.log("函数声明: "+(i+1));}
add1(1);var add1 = 函数(i){console.log() “函数表达式:”+ (i+2));}添加1(1); "函数声明:"+(i+10));}
添加1(1);
执行结果:
函数声明:11
函数表达式:3
16 函数表达式:3
这是为什么?我们根据上面提到的函数声明的特点来分析一下。
首先,在函数预执行之前,将函数声明的函数定义前置到顶部。上述代码实际执行顺序为:
var add1;功能add1(i){console.log ("函数声明:"+( i+1));}函数 add1(i){console.log() “函数声明:”+( i+ 10));}add1(1);//11.执行上述函数 add1 = function(i){console.log("函数表达式:"+(i+2)) ;}
add1(1);//3
add1(1);//3
函数实例化定义的特点:
定义的函数只能访问局部作用域和全局作用域。
var人={姓名:“刘德华”,年龄:50};(功能(){var人= {姓名:"刘德华",年龄:30};var func = new Function("var person = {name:'刘德华',age:10};\console.log(www.gsm-guard.net+person.age+ '年');");func();
})();\\刘德华已经10岁了。是什么意思 ”\”?
2 new Function("console.log(www.gsm-guard.net+person.age+'year');");