javascript 函数也是数据类型

来源:互联网 发布:mysql当前时间减一天 编辑:程序博客网 时间:2024/06/05 11:19

在javascript中有一个概念我们必须明确——函数也是一种数据类型,


下面的两种函数定义方法在本质上是一致的

 JavaScript Code 
1
2
3
4
>>> function f() {return 1;}

>>> var f=function(){return 1;}

 JavaScript Code 
1
2
3
>>> function g() {return 1;}
>>> typeof g;
"function"
函数也是一种数据类型,这种类型就是 function。这种类型有两个重要的特征

1、它所包含的是代码

2、它们是可执行的(或者说是可调用的)


既然函数是一种数据类型,那么自然就可以相互赋值、删除,函数的命名规则也跟一般变量相同

 JavaScript Code 
1
2
3
4
5
6
7
8
9
>>> var sum=function(a,b){return a+b}
>>> var add=sum
>>> delete sum
true
>>> typeof sum
"undefined"
>>> typeof add
"function"


回调函数


既然函数可以像其他类型的数据那样赋值给某个变量,那么可不可以当作参数传递给其他函数呢?
 JavaScript Code 
1
2
3
4
5
6
>>> function add(a,b){return a()+b()}
>>> function one(){return 1;}
>>> function two () {return 2;}
>>> add(one ,two);
3


自调函数

匿名函数怎样自己调用自己?直接在后面加一个括号

 JavaScript Code 
1
2
3
>>> (
        function() {alert('bool')}
    )()

 JavaScript Code 
1
2
3
4
5
6
>>>  ( 
function (name)
        {
            alert(name+"");
        }  
    )("我")



内部(私有)函数


既然i函数和其他类型的值在本质上是一样的,因而我们可以在一个函数中定义另外一个函数
 JavaScript Code 
1
2
3
4
5
6
7
8
9
10
11
>>> var a=function(p)
            { 
                var b=function(t)
                    {
                        return t*2;
                    };          
                return "结果是"+b(p);
            
             }
>>> a(6)
"结果是12"

返回函数的函数


 JavaScript Code 
1
2
3
4
5
6
>>> function a(){alert('A'); return function (){alert('B')};}
>>> var t=a()
>>> t()

//等价于
>>> a()()


重写自己的函数


 JavaScript Code 
1
2
3
4
5
6
7
8
>>> function a()
                {
                    alert('A'); 
                    a=function()
                        {
                            alert('B')
                        };  
                }
第一次调用a()  alert('A')会被执行   ,第二次调用a() 变量a就已经b诶重新定义了,这时执行的是alert(‘B’)

1 0