zoukankan      html  css  js  c++  java
  • javascript函数

    1、function对象的加载
    每个函数都是Function对象的实例,而且与其他引用类型具有相同的属性和方法。函数是对象,函数名实际上是指向函数对象的一个指针,不会与函数绑定。
    函数名是一个指向函数的指针,所以不会有重载同时参数传递也是一个arguments对象来保存所有参数,无法通过签名来判断是否重载
     
    在函数加载中解析器会预先读取函数的声明,以至于所有代码都能够使用到函数;而如果是声明对象的话则是要按照顺序进行解析
    <html>
      <head>
        <title>jsTest</title>
        <script type="text/javascript">
        /*
          这个显然说明js在加载函数时,是先加载函数声明后保证在任何地方都能够使用。
         */
          alert(sum(100,200));
          function sum(num1,num2)
          {
            return num1+num2;
          };
          /*
          下面的语句就会出现错误,因为解析器是下加载函数声明,而var sum=function(sum1,sum2)不是函数声明,是变量sum的初始化对象
           */
          alert(sum(100,200));
          var sum=function(num1,num2)
          {
            reutrn sum1+sum2;
          };
        </script>
      </head>
      <body>
      </body>
    </html>
     
    2、函数实际上也是一个变量,所以函数可以作为另一个函数的参数,也可以作为返回值。
     
    <html>
      <head>
        <title>jsTest</title>
        <script type="text/javascript">
        /*
          显然desc函数作为sum函数的一个参数,返回值也是desc函数运行之后的返回值
         */
          alert(sum(desc,100,200));
          function desc(num1,num2)
          {
            if(num1>num2)
            {
              return num1-num2;
            }
            else{
              return num2-num1;
            }
     
          }
          function sum(desc,num1,num2)
          {
            return desc(num1,num2);
          }
        </script>
      </head>
      <body>
      </body>
    </html>
    3、函数的内部属性:arguments和this
         arguments属性是一个类似数组对象,主要用于保存函数的参数。arguments还有一个callee的属性,该属性可以在递归的时候解除函数体与函数名的紧密耦合。
         arguments.callee和函数名指向的是同一个函数实体,即
    function factority(num)
    {
         if(num<=1)
         {
              return 1;
         }
         
         return num*arguments.callee(num-1);//在这儿arguments相当于函数factority的别名,这条语句等价于num*factority(num-1);
    }
     
    <html>
      <head>
        <title>jsTest</title>
        <script type="text/javascript">
        /*
          显然desc函数作为sum函数的一个参数,返回值也是desc函数运行之后的返回值
         */
          alert(factorial(5));
          function desc(num1,num2)
          {
            if(num1>num2)
            {
              return num1-num2;
            }
            else{
              return num2-num1;
            }
     
          };
          function sum(desc,num1,num2)
          {
            return desc(num1,num2);
          };
          function factorial(num)
          {
            if (num<1) {return 1}
            else
              {
                return num*arguments.callee(num-1);
              }
          }
        </script>
      </head>
      <body>
      </body>
    </html>
    4、函数的属性length表示希望接受的参数的数目,而不是实际接收的参数个数。对于对象而言, prototype属性是用来保存方法的。
        apply()和call()方法用来改变函数的作用域
     
    函数通过调用call方法可以在不同的作用域中运行
    var color="red";
    var o={color:"blue"};
    function saycolor()
    {
         alert(this.color):
    }
    saycolor.call(this);//red
    saycolor.call(window);//red
    saycolor.call(o);//blue
     
    call函数用来定义作用域的,由于是在全局执行环境下运行,所以this指代的是window,而更改为o之后作用域对象就是o
     
         bind()方法会创建一个函数的实例,然后并将作用域传递给新实例,也可以带有一个作用域的参数传递给新实例
     
    var color="red";
    var o={color:"blue"};
    function sayColor()
    {
         alert(this.color);
    }
    sayColor1=sayColor.bind(o);//blue,这个将变量o作为执行环境的变量对象传递新函数实例
     
     
     
     
     
     
  • 相关阅读:
    C语言程序设计100例之(12):Eratosthenes筛法求质数
    C语言程序设计100例之(11):求质数
    C语言程序设计100例之(10):最大公约数
    C语言程序设计100例之(9):生理周期
    C语言程序设计100例之(8):尼科彻斯定理
    C语言程序设计100例之(7):级数求和
    C/C++ 内部连接与外部连接
    C/C++ 内存管理问题
    C/C++浮点数的比较
    C/C++规范
  • 原文地址:https://www.cnblogs.com/Black-Cobra/p/7416432.html
Copyright © 2011-2022 走看看