zoukankan      html  css  js  c++  java
  • 关于js函数的说明

    js函数直接声明和函数表达式的区别:

    直接声明函数:

    function test(){  }

    把匿名函数复制给本地变量:

    var test = function(){  }

    区别:第一种方式在声明时就是一个命名的函数,无论是声明在调用之前还是在调用之后,甚至是不会执行的位置,比如return语句之后,都是整个作用于可以访问的。第二种方式是通过把匿名函数复制给变量的方式,这是一个函数表达式,在复制之前这个函数不能被任何代码访问到,即这个复制必须在调用之前完成,否则调用时会出现错误。

    在js运行中有一个特殊的全局环境,这个对象上面存放全局的函数和变量,实际开发中经常会使用若干第三方的库或多个js文件,若不小心在全局对象引入重复的变量或函数声明,则会造成代码执行混乱。先后引入两个js文件定义了同一个函数,则后面引入的函数会覆盖第一个定义的函数,造成错误。为了避免这种错误,使用匿名函数的方法已经被大多数开源js库使用。

    (function(){

    function log(msg){console.og(msg);}

    })();

    在这里,log函数的作用于被限制在这个匿名函数之内,而匿名函数则因为被外面的一对小括号包括起来,形成一个函数表达式,表达式的值是一个函数,紧接着一对小括号表示立即执行这个函数,让原有的代码正常执行一次。这种方式声明的函数,通过var声明的变量等等都是内部的,不会被任何匿名函数之外的代码访问到。如果需要对外暴露一些函数作为接口的话,使用以下方法:

    var mylib = (function(global){

      function log(msg){

        console.log(msg);

    }

    log1=log;//法一:利用没有var的变量声明的默认行为,在log1成为全局变量,不推荐的方法。

    global.log2=log;//法二:直接在管局对象上添加log2属性,复制为log函数,推荐方法。

    return{

      log:log  //法三:通过匿名函数返回值得到一些列借口函数集合对象,复制给全局变量mylib,推荐。

    };

    }(window));

    函数作为参数或返回值使用时,成为高阶函数。js中的函数都可以作为高阶函数来使用。

    function negative(n){

    return -n;

    }

    function square(n){

    return n*n;

    }

    function process(nums,callback){

    var result=[];

    for(var i=0,length=nums.length;i<length;i++){

        result[i]=callback(nums[i]);

      }

    return result;

    }

    var nums=[1,2,3,4,5,6];

    var n=process(nums,negetive);  //n=[-1,-2,-3,-4,-5,-6]

    var m=process(nums,square);   //m=[1,4,9,16,25,36]

    以上代码将函数作为参数出传入另一个函数process调用,在process函数的实现中,把callback作为一个黑盒子看待,负责把参数传给它,然后获取返回值,在调用之前并不清楚callback的具体实现。

  • 相关阅读:
    深入浅出Powershell——创建本地账号
    SharePoint快速调试技巧
    深入浅出PowerShell——设置用户群组
    深入浅出SharePoint——权限提升
    伪数组
    用例的类型与粒度
    将 RTC 客户端 API 用于可缩放的应用程序
    InstallShield 收藏
    开发工具总结
    WEB免费打印控件推荐
  • 原文地址:https://www.cnblogs.com/lionisnotkitty/p/6307641.html
Copyright © 2011-2022 走看看