zoukankan      html  css  js  c++  java
  • JavaScript的函数(一)

    ,1,在javascript中,函数即对象。函数里面的参数可以是个函数,例如:

    data.sort(function(a,b){return a-b;})
    

      函数的返回值,return语句导致函数停止执行,并返回它的表达式(如果有的话)的值给调用者。如果没有返回值的函数,就是没有return,就是返回 undefined值给调用者。没有返回值的函数有时候称为过程。

    2,嵌套函数:

    有趣之处在于他的变量作用域规则。就是函数里面可以嵌套一个函数。

    3,函数调用:

    作为函数;

    作为方法(无非是保存在一个对象属性里面的javascript函数);

    作为构造函数;

    通过它们的call()和apply()方法间接调用。

    方法和this关键字是面向对象编程范例的核心。任何函数只要作为方法调用,实际上都会传入一个隐式的实参---这个实参是一个对象。方法调用的母体就是这个对象。

    var o = {
        m:function(){
            var self = this;
            console.log(this === o);
            f();
            function f(){
                console.log(this);
                console.log(self === o);
            }
        }
    }
    执行 o.m()
    结果:
    true
    false
    true
    

     这里说明一点:嵌套函数里面的this指向问题:this的值是全局对象或者undefined,如果要用外层函数的上下文环境,则需要将this的值保存在一个变量self里面。 

    4,方法链:

    当方法的返回值是一个对象,这个对象还可以再调用它的方法,形成链式的调用方式。

    当方法并不需要返回值时,最好直接返回this。如果 在设计的API中一直采用这种方式(每个方法都返回this)。使用API就可以进行“链式调用”,不要将方法的链式调用和构造函数的链式调用混为一谈。

    5,构造函数的调用:

    首先:如果构造函数没有形参,可以省略圆括号,

    var o = new Object();
    var o = new Object;
    

      这个两种写法是等价的。其次:new o.m();调用上下文不是o,而是这个新对象作为调用上下文。
           最后:函数的返回值,构造函数通常不使用return关键字。

    6,可变长的实参列表:实参对象
    当:实参列表 > 形参个数,没有办法获得未命名值的引用。参数对象解决了这个问题。在函数体内,arguments是指向实参对象的引用。实参对象是一个类数组对象。可以通过下标来访问实参值。不用非得通过名字来得到实参。
    实参对象有一个重要的用处:就是让函数可以操作任意数量的实参。例如:

    function max(){
        var max = Number.NEGATIVE_INFINITY;
        for(var i = 0;i<arguments.length;i++){
            if(arguments[i] > max){
                max = arguments[i];
            }
        }
        return max;
    }
    var largest = max(1,10,100,2,3,1000,4,5,1003);//1003
    

      类似这种函数可以接收任意个数的实参。也称为:“不定实参函数”。

    remember:arguments并不是真正的数组,而是一个实参对象。可以这样理解:它是一个对象,只是碰巧拥有以数字为索引的属性。

    实参对象还定义了callee和caller属性。arguments.callee()属性指向当前正在执行的函数。caller是非标准的,单大多数浏览器都实现了这个属性。实用场景:匿名函数中通过callee来递归调用自身。

    var factorial = function(x){
        if(x <= 1) return 1;
        return x*arguments.callee(x-1);
    }
    factorial(10) //这里就是一个10*9*8*7*6*5*4*3*2*1的方法,用的是递归
    
    匿名函数的实现方式:
    (function(x){
        if(x <= 1) return 1;
        return x*arguments.callee(x-1);
    }(10))     //同样也是可以实现该递归的方法
    

    7.将对象属性用作实参: 

         当一个函数包含超过三个形参时,最好通过名/值对的形式来传入参数。这样参数的位置就无关紧要。而且这种写法允许在函数中设置省略参数的默认值。

     

  • 相关阅读:
    How To Scan QRCode For UWP (4)
    How To Crop Bitmap For UWP
    How To Scan QRCode For UWP (3)
    How To Scan QRCode For UWP (2)
    How To Scan QRCode For UWP (1)
    How to change windows applicatioin's position via Win32 API
    8 Ways to Become a Better Coder
    How to resize or create a thumbnail image from file stream on UWP
    C# winform压缩文件夹带进度条
    MS ACCESS MID函数
  • 原文地址:https://www.cnblogs.com/tangjiao/p/8977256.html
Copyright © 2011-2022 走看看