- function one(){...};
- var two=function thr(){....}; //具名函数
- var two=function(){....}; //匿名函数
- (function four(){.....})();//立即执行函数表达式
1:函数名称标识符绑定在何处:函数声明的函数名可在函数体外、内使用,函数定义表达式的函数名(如果有)只能在函数体内使用
2:函数是否有提示行为:函数声明存在提升行为,函数定义表达式没有。
- 例如:function one(){....}
- var obj1={
- fun:one,
- };
- obj1.fun(); //通过obj上下文去调用;this->one
-
- var obj2={
- obj1:obj1,
- fun1:one,
- fun2:obj1.fun;
- };
-
- obj2.obj1.fun(); == obj2.fun1(); == obj2.fun2(); //这几种是等价的, 函数是引用的,本体只有一个,都是one的引用而已。
在JavaScript中,函数复制的不是副本,函数只有引用。
- function f(){
- //debugger; //调试
- var a=[],i;
- for(i=0;i<3;i++){
- a[i]=function(){
- return i;
- }
- }
- return a;
- }
- var a=f();
- a[0](); //3
- a[1](); //3
- a[2](); //3
初始状态:
f()调用结束后:
- function f(){
- //debugger;
- var a=[],i;
- for(i=0;i<3;i++){
- a[i]=(function(x){
- return function(){return x;};
- })(i);
- }
- return a;
- }
- var a=f();
- a[0](); //0
- a[1](); //1
- a[2](); //2
初始状态:
因为和1没有什么区别,所以,图和1一样。
f()调用结束后:
- function f(){
- //debugger;
- var a=[],i,m=90;
- for(i=0;i<3;i++){
- a[i]=(function(x){
- return function(){console.log(m);return x;};
- })(i);
- }
- return a;
- }
- var a=f();
- a[0](); //90,0
- a[1](); //90,1
- a[2](); //90,2
初始状态:
同上;
f()调用结束后: