zoukankan      html  css  js  c++  java
  • JavaScript之Function类型

    每个函数都是 Function 类型的实例,而且都与其他引用类型一样具有属性和方法。由于函
    数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。函数通常是使用函
    数声明语法定义的,如下面的例子所示。

    function sum (num1, num2) {
    return num1 + num2;
    }
    这与下面使用函数表达式定义函数的方式几乎相差无几。
    var sum = function(num1, num2){
    return num1 + num2;
    };

    没有重载

    同名的函数,后面的函数会覆盖前面的函数。

    函数声明和函数表达式

    解析器会率先读取函数声明,并使其在执行
    任何代码之前可用(可以访问);至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真
    正被解释执行。请看下面的例子。

    alert(sum(10,10));
    function sum(num1, num2){
    return num1 + num2;
    }

    如果改为函数表达式就会报错

    alert(sum(10,10));
    var sum = function(num1, num2){
    return num1 + num2;
    };

    函数的内部属性

    在函数内部,有两个特殊的对象: arguments this。其中, arguments 在第 3 章曾经介绍过,
    它是一个类数组对象,包含着传入函数中的所有参数。虽然 arguments 的主要用途是保存函数参数,
    但这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。
    请看下面这个非常经典的阶乘函数。

    function factorial(num){
    if (num <=1) {
    return 1;
    } else {
    return num * factorial(num-1)
    }
    }

    函数内部的另一个特殊对象是 this,其行为与 Java C#中的 this 大致类似。换句话说, this
    引用的是函数据以执行的环境对象——或者也可以说是 this 值(当在网页的全局作用域中调用函数时,
    this 对象引用的就是 window)。来看下面的例子。

    window.color = "red";
    var o = { color: "blue" };
    function sayColor(){
    alert(this.color);
    }
    sayColor(); //"red"
    o.sayColor = sayColor;
    o.sayColor(); //"blue"

    函数的属性和方法

    每个函数都包含两个
    属性: length prototype。其中, length 属性表示函数希望接收的命名参数的个数,如下面的例
    子所示。

    function sayName(name){
    alert(name);
    }
    function sum(num1, num2){
    return num1 + num2;
    }
    function sayHi(){
    alert("hi");
    }
    alert(sayName.length); //1
    alert(sum.length); //2
    alert(sayHi.length); //0
  • 相关阅读:
    从goauth2的一个bug说起
    Vagrant与skynet框架
    离开博客园了
    (转) Android开发性能优化简介
    ListFragment源码 (待分析)
    Activity来了
    Android下的屏幕适配
    恶心的content
    Android下的xml资源详解
    各个页面样子的实现与演示
  • 原文地址:https://www.cnblogs.com/leomei91/p/7489682.html
Copyright © 2011-2022 走看看