zoukankan      html  css  js  c++  java
  • 《深入理解JavaScript》—— 函数

    1.JavaScript中函数的3种形式

    一旦你定义了一个函数,那么他就拥有了多种调用形式:

    ●  非方法调用(“普通函数”)

    你可以直接调用函数,那么它会像一个普通函数一样运行。

    add(‘hello’);

    通常,函数的命名以小写字母开头。

    ●  构造器

    你可以使用new操作符来调用一个函数。哲挥手函数将会是一个构造器,一个创建对象的工厂:

    var a = new Date();

    通常,函数作为构造器,其命名都是以大写字母开头。

    ●  方法

    你可以讲一个函数储存为一个对象的属性,这时候他会变成一个方法,而你可以通过对象啦调用它。

    obj.method();

    按照惯例,方法的名称也是以小写字母开头。

    (2) 术语:“形参”(parameter)和“实参”(arguments)

    ●  形参被用在定义函数时。其中param1和param2都是形参。

     function foo( param1 , param2 ) {
        return param1 + param2;
    }
    foo();

    其中实参是在函数调用时被使用。

    foo( 2 , 3 );

    (3) 定义函数

    ●  通过函数表达式

    ●  通过函数声明

    ●  通过Function()构造器

    其中,所有函数都是Function构造器的实例。因此,函数从Function.prototype上继承了方法。

    1. 函数表达式

    函数表达式会产生一个值——函数对象。例如:

    var add = function ( x , y ) {
        return x + y;
    };
    console.log ( add(1,2) );  // 3

    具名函数表达式:你可以给函数表达式起一个名字,具名函数表达式使得函数表达式可以引用它自身,这对递归很有用。

    注:具名函数表达式的名字只能在函数表达式内部被访问到。

    var repeat = function me( n , str ) {
        return n > 0 ? str + me(n-1,str) : '';
    };
    console.log ( repeat( 3 , 'hello' ) );  // hellohellohello
    console.log ( me ); // ReferenceError : me is not defined

    2. 函数声明

    函数声明看起来像是一个函数表达式,但其实它是一个语句。

    3. Function构造器

    var add = new Function ( 'x' , 'y' , 'return x + y' );

    我: 只做了解就好,这种方法完全不建议使用。

    (4) 函数提升

    函数提升表示“将函数的声明放到作用域的开始”。函数声明是做了完全提升的,而变量声明则是部分提升。

    (5) 函数的名称

    大多数JavaScript引擎对于函数对象都会提供一个非标准的name属性。

    函数的名称对于debug来说是非常有用的,所以有一些开发者会给函数表达式加上名字。

    (6) 控制函数调用:call()、apply()、bind()

    所有的函数(记住这里说的函数是指对象以及对象的方法)都具有call()、apply()、bind()方法。它们可以在执行方法时用一个值指向this,并改变面向对象的作用域。

    1. func.apply(thisValue,argValue)

    2. func.bind(thisValue,arg1,arg2...)

    这个方法会执行部分的函数功能,它会创建一个新的函数,这个函数会调用func,并会将thisValue指定为this,同时应用以下参数,紧随其后的是新函数的实际参数。

  • 相关阅读:
    Intent
    What should we do next in general after collecting relevant data
    NOTE FOR Secure Friend Discovery in Mobile Social Networks
    missing pcap.h
    after building Android Source code
    plot point(one column)
    When talking to someone else, don't infer that is has been talked with others at first. It may bring repulsion to the person who is talking with you.
    进程基本知识
    Python input和raw_input的区别
    强制 code review:reviewboard+svn 的方案
  • 原文地址:https://www.cnblogs.com/luohaoran/p/5964697.html
Copyright © 2011-2022 走看看