博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 函数
阅读量:7009 次
发布时间:2019-06-28

本文共 3457 字,大约阅读时间需要 11 分钟。

hot3.png

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();

 

 

 

 

 

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/1403169/blog/380772

你可能感兴趣的文章
jqprint导入jqgrid表格时,内容溢出的原因以及解决方法
查看>>
IOS self.使用
查看>>
POJ1151 Atlantis
查看>>
UltraEdit编辑器使用心得之正则表达式篇
查看>>
dnspod 批量添加记录
查看>>
ZCMU训练赛-H(模拟)
查看>>
Codeforces Round #449 (Div. 2) A. Scarborough Fair【多次区间修改字符串】
查看>>
CCCC L1-039. 古风排版【图形输出/循环控制行列/模拟/细节】
查看>>
POJ 1182 食物链 【带权并查集/补集法】
查看>>
V字形
查看>>
Flask学习笔记(3)-数据库迁移
查看>>
Hbase常用操作
查看>>
一行命令学会全基因组关联分析(GWAS)的meta分析
查看>>
第二阶段冲刺——six
查看>>
模块封装代码
查看>>
《Machine Learning》(第一章)序章
查看>>
【右键禁用U盘的小技巧】
查看>>
执行sql语句后的数据处理api
查看>>
jquery $.each的用法
查看>>
Python --元组与列表的差异
查看>>