JavaScript函数深究

1、函数之中可以定义命名函数,并将命名函数返回

function a(){

      function b(){

           alert("this is b ")  

     }

    return b;

}

 

可以这样调用:

    var  c = a();

    c();

或者这样调用: 

              a()();

 

2、函数之中可以返回匿名函数

function a(){

      return function(){

            alert("this is return no name function")

     }

}

可以这样调用

        a()();  

    或者这样调用

      var c = a();  c();

 

3、可以在函数之中定义自定义类,并返回类,类的静态属性在对象的结构上是挂载在_prototype.construct下,实例属性是挂载在_prototype,和construct同级

function factory(){

        function Tabs(name){

                this.name = name;

        }

       

       Tabs._DEFAULT_VAL = {

               'mean': 'private static property'

       }

      

       Tabs.prototype.deVal = {}

 

       Tabs.prototype.init = function(){

                 alert('i am a instance method of Class , my name is init') 

        }

       

       Tabs.addTab = function(options){

                  alert('i am a static method of Class , my name is <h2>add</h2>tab ')

       }

       

       Tabs.closeTab = function(tabName){

              alert('i am a static method of Class , my name is <h2>close</h2> tab ')

       }

       

      return Tabs;

}

 

这样使用:

var Tabs = factory();

Tabs.addTab();

var tabs = new Tabs();

tabs.init();

 

4、函数作为函数参数

function  exec(callback){

       callback();

}

 

exec(function(){alert('callback')});

 

5、函数可以存放到数组中

var event = {}

function on(name,callback){

      var list  = event[name] || (event[name] = []);

      list.push(callback)    

}

 

function emit(name,data){

       var list = event[name], fn;

       if(list){

             list = list.slice();

            while(list.shift()){

                  fn(data);

           }

       }

}

 

6、函数名称首字母大写,则规范认为此函数为构造函数,构造函数的名称就是类名。使用new关键字为此类新建对象时,新对象的构造函数就是此函数。

7、函数名称不大写,也可以为函数定义属性

function exec(factory){

        function require(){

        }

       require.resolve = function(){

              alert("require resolve")

       }

      factory(require);

}

 

var f = function factory(require){

      require.resolve();

}

exec(f);

 

8、可以将匿名函数、命名函数赋值给变量

var func = function inherit(){

       console.log('----------');

}

func();

 

var func1 = function(){

      console.log('*********************')

}

 

9、可以将带有参数的函数作为参数,传送给函数,在函数中对参数函数进行调用,示例如7

 

 

 

不得不感叹Javascript函数功能之彪悍,之强大。

posted @ 2018-09-05 11:31  qingshan  阅读(91)  评论(0)    收藏  举报