码迷,mamicode.com
首页 > 编程语言 > 详细

javascript 函数

时间:2015-02-28 16:50:49      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

3.4 函数也是数据
    函数是一种数据类型,
  

   function f() {
        return 1;
     }

     var f = function (){ retrun 1; }


     第二种定义方式通常被叫作函数标识记法。

     函数这种特殊的数据类型有两个重要的特性:
        1.它们所包含的是代码
        2.他们是可执行的(或者说是可调用的)


    3.4.1 匿名函数
        1.函数是本质上与其他的变量并区别,因此他也可以在名字的情况下被使用、
           function (a){ return a;}


         2.让散落在代码中的那些匿名数据片段不会真的一无食处,我们可以将它们设置成函数。这样我们就有了两种优雅的用法。
            一、我们可以将匿名函数作为参数传递给其他的函数,这样,接收方函数就能利用我们所传递的函数来完成某些事情。
            二、我们可以定义某个匿名函数来执行某些一次性仍无


       3.4.2 回调函数
               把函数当成参数传递
           

     function one (){
                    return 1;
                }
                function two(){
                    return 2;
                }
                function invoke_and_add(a,b){
                    return a() + b();
                }
                //TO CALL
                invoke_and_add(one,two);

                使用匿名函数来替代one() 和two(),以作为目标函数的参数
              

  invoke_and_add(function(){return 1},function(){return 2;});
                function a(b){
                    b();
                }
                function b(){
                    console.log("im callback");
                }

                将函数A传递给函数B,并由B执行A时,A就成了一个回调函数

   function a(b){

                       console.log("im a");  

                       b();

                    }

                    //回调函数    

                    function b(){

                         console.log("IM CALLBACK");  

                     }

                A是一个无名函数,我们就称为匿名回调函数
                   //传递匿名回调函数
                  

 a(function(){

                    console.log("匿名函数");

                   });


              什么时候使用回调函数???
                1、他可以让我们在不做命名的情况下传递函数(这意味着可以节省全局变量);
                2、我们可以将一个函数调用操作委托另一个函数(这意味着可以节省一些代码编写工作)
                3、它们有助于提升性能

 


                 // style1、
        

function multiplyByTwo(a,b,c){
            var i,ar = [];
            for(var i=0;i<3;i++){
                ar[i] = arguments[i]*2;
            }
            return ar;
         }
         function addOne(a){
            return a+1;
         }
         console.log(multiplyByTwo(1,2,3));
         console.log(addOne(100));


         // style2. 我们要实现三个元素在两个函数之间的传递,这需要定义一个用户存储元素的数据
       

  var myArr=[];
         myArr = multiplyByTwo(10,20,30);
         console.log(myArr);
         for(var i=0;i<3;i++){myArr[i] = addOne(myArr[i]);}
            console.log(myArr);


        //  style3.  把两个函数合二为一  对multiplyByTwo 函数做一些改动,使其就是一个回答覅函数,并在每次迭代操作中调用它
        // 
        // 
       

function multiplyByTwo(a,b,c,callback){
            var i,ar = [];
            for(var i=0;i<3;i++){
                ar[i] = callback(arguments[i]*2);
            }
            return ar;
         }
         myArr = multiplyByTwo(1,2,3,addOne);


自调函数:
   
   

(function(){

        alert(‘foo‘);

    })();

    1.将匿名函数放进
        - 语法格式:(匿名函数)
        //0.匿名函数
      

  function(){
        }

        - 立即调用语法格式: (匿名函数)()
        //1.自调函数
       

 (function(){

            alert(‘foo‘);

        })();

        - 传递参数语法格式:(匿名函数)(参数)
        //2.匿名函数可以传递参数
     

   (

            function(name){

                console.log("匿名函数可以传递参数="+name);

            }

        )("demo")


        什么时候使用自调函数

            1.自调匿名函数的好处不会产生任何变量,
            2.缺点是这样的函数是无法重复执行的。
            3.匿名自调函数最适合一些一次性或初始化的任务。

3.4.5 内部(私有)函数
 

   function a(param){
        function b(theinput){
            return theinput*2;
        }
        return ‘The result is‘ + b(param);
    }

    使用私有函数的好处主要有以下几点:
        1.有助于我们确保全局名字空间的纯净性(这意味着命名冲突的机会很小)
        2.私有性————这使我们可以选择只将一些必要的函数暴露给许“外部世界”,并保留属于自己的函数,使他们不为该应用程序的其他部分所用。


3.4.6 返回函数的函数

        function a(){
            alert(‘a!‘)
            return funtion(){
                alert("返回回来的函数");
            }
        }
        a()();

        好处:
            1.这对于要执行某些一次性初始化工作的函数非常有用。
            2.


3.5 闭包
   
     3.5.2 词法作用域

function f1(){
                var a = 1;
                //被执行时
                f2();
            }
            //被定义时
            function f2(){
                return a;
            }
            f1();

 

 

 

 

 

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

javascript 函数

标签:

原文地址:http://my.oschina.net/u/1403169/blog/380772

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!