zoukankan      html  css  js  c++  java
  • 函数的定义与调用

    1.理解函数

    函数是一段代码块,它只定义一次,但可以被执行或调用任意次。函数可以有参数,实参(argument)和形参(parameter),实参是在运行时的函数调用时传入的参数,形参是函数中定义的变量。

    如果函数挂载在一个对象上,作为对象的一个属性,就称它为对象的方法。当通过这个对象来调用函数时,该对象就是此次调用的上下文,也就是该函数的this值。

    函数还可以作为构造函数使用,用来初始化新建一个对象。

    函数可以嵌套在其它函数里,构成一个闭包。

    2.函数定义的方式

    有两个最常用的创建函数对象的方法,即使用函数表达式或者使用函数声明。

    JavaScript使用关键字function定义函数。函数可以通过声明定义,也可以是一个表达式。函数声明 必须始终带有一个标识符-函数名,而函数表达式 则可省略这个标识符:

    (1)函数声明

    function myFunction(a, b) {
        return a * b;
    }
    

    函数声明后不会立即执行,会在我们需要的时候调用到。分号是用来分隔可执行JavaScript语句。由于函数声明不是一个可执行语句,所以不以分号结束。

    (2)函数表达式

    var x = function (a, b) {return a * b};
    var z = x(4, 3);
    

    以上函数实际上是一个 匿名函数 (函数没有名称)。函数存储在变量中,不需要函数名称,通常通过变量名来调用。上述函数以分号结尾,因为它是一个执行语句。

    (3)使用Function() 构造函数(不使用)

    var myFunction = new Function("a", "b", "return a * b");
    var x = myFunction(4, 3);
    可以不使用new命令,返回结果完全一样。
    不使用构造函数。上面实例还可以写成:
    var myFunction = function (a, b) {return a * b}
    var x = myFunction(4, 3);
    所以在 JavaScript 中,很多时候,你需要避免使用 new 关键字。
    

    3.函数的调用

    函数在定义时并不会执行,只有调用该函数时,它们才会执行。有四种方式来调用JavaScript函数。

    • 作为函数
    • 作为方法
    • 作为构造函数
    • 通过他们的方法(call,apply)间接调用

    (1)作为函数

    调用函数时,要使用圆括号运算符。圆括号之中,可以加入函数的参数。
    myFunction(3,5);
    
    

    (2)作为方法

    o.m=f;
    o.m();
    

    (3)作为构造函数

    function Car(sColor,iDoors,iMpg) {
      this.color = sColor;
      this.doors = iDoors;
      this.mpg = iMpg;
      this.showColor = function() {
        alert(this.color);
      };
    }
    
    var oCar1 = new Car("red",4,23);
    

    (4)通过方法间接调用

    function sayColor(color){
        this.color=color;
        alert(this.color);
    }
    function ClassB(sColor, sName) {
        sayColor.call(this, sColor);//this是指classB的实例对象,将sayColor函数作为classB的实例对象方法调用,并传入了sColor参数。
    
       // sayColor.apply(this, arguments);
        this.name = sName;
        this.sayName = function () {
            alert(this.name);
        };
    }
    

    4.其它的一些知识

    (1)自调用函数

    函数表达式可以 "自调用"。如果表达式后面紧跟 () ,则会自动调用。不能自调用声明的函数。通过添加括号构成一个分组操作符,而分组操作符只能包含表达式,以此来说明它是一个函数表达式:

    (function () {
        var x = "Hello!!";      // 我将调用自己
    })();
    以上函数实际上是一个 匿名自我调用的函数 (没有函数名)。
    

    问题:为何在函数创建后的立即调用中必须用圆括号来包围它?

    答案就是:表达式句子的限制就是这样的。

    (function () {
      ...
    })();
    

    按照标准,表达式语句不能以一个大括号{开始是因为他很难与代码块区分,同样,他也不能以函数关键字开始,因为很难与函数声明进行区分。

    (2).函数提升(Hoisting)

    提升(Hoisting)是 JavaScript 默认将当前作用域提升到前面去的的行为。提升(Hoisting)应用在变量的声明与函数的声明。

    因此,函数可以在声明之前调用:

    myFunction(5);//先调用
    
    function myFunction(y) {//后声明
        return y * y;
    }
    
    注意:使用表达式定义函数时无法提升。不要在条件语句中使用函数声明,而要使用函数表达式。因为函数声明会提升,可能会形成覆盖或无效。由于存在函数名的提升,所以在条件语句中声明函数,可能是无效的,这是非常容易出错的地方。
    
  • 相关阅读:
    Understanding about Baire Category Theorem
    Isometric embedding of metric space
    Convergence theorems for measurable functions
    Mindmap for "Principles of boundary element methods"
    Various formulations of Maxwell equations
    Existence and uniqueness theorems for variational problems
    Kernels and image sets for an operator and its dual
    [loj6498]农民
    [luogu3781]切树游戏
    [atAGC051B]Three Coins
  • 原文地址:https://www.cnblogs.com/YeChing/p/6286543.html
Copyright © 2011-2022 走看看