• javascript学习笔记


    五 Function类型

      每个函数都时Function类型的实例。函数也是对象。

      声明函数:

        function func_name () {}       //javascript解析器会在程序执行时率先读取函数声明,使其在执行任何代码之前可用(可访问)  
        var func_name = function(){};  //解析器执行到它所在的代码行,才会被解释执行。

      因此函数名是个变量,保存的是指向函数对象的指针,不会与某个函数绑定,与包含对象指针的其他变量没什么区别。

      1.没有重载

        声明两个同名的函数,第二个会覆盖掉第一个

      2.作为值的函数

        函数名本身就是变量。因此函数体可以当作值来使用。可以当参数进行传递,也可以当其他函数的返回值。

    function callSomeFunction (someFunction, someArgument){
          return someFunction(someArgument);  
    }

          3.函数内部属性

        函数内部有两个特殊的对象:arguments 和 this 

        *arguments对象保存的是所有传入函数内部的参数。

        *arguments.callee。这是一个指针,指向拥有该arguments对象的函数

    复制代码
    function factorial(num) {
        if(num <=1){
           return 1;
        }else{
           return num*arguments.callee(num-1);//递归调用
           //相当于:
           //return num*factorial(num - 1); 
           //这样消除了函数名与内部递归调用函数名的紧密耦合性
        }
    }
    复制代码

                 *this 引用的是函数据以执行的环境的变量对象。

                 *caller 对象属性。此属性保存的是调用当前对象的函数的引用。如果在全局作用域中调用当前函数,值为null

    复制代码
    function outer()
    {
         inner();  
    }
    
    function inner()
    {
         alert(arguments.callee.caller);
    }
    
    outer();//返回outer()函数的源代码
    复制代码

          4.函数属性和方法

        length ---  FunctionObject.length 函数参数的个数。函数没有参数,则返回0

        apply() --- Function.apply(scope[ ,Function.arguments||Array])//传递的参数可以为Arguments对象,也可以为参数数组

        call() ---   Function.call(scope[, argument1,argument2,.......])//所要传递的参数必须一一列举吹来

        这两个函数都是扩展它自身运行时所在的作用域。参数1,这两个函数运行时所在的作用域(一般都为对象);参数2, 传递给这个函数的参数。

    复制代码
    window.color = 'red';
    var o = {'color':'blue'};
    
    function sayColor(){
         alert(color);      
    }
    
    sayColor(); // red
    
    sayColor.call(this) //red
    sayColor.call(window) //red
    sayColor.call(o) //blue
    复制代码

        使用这两个函数的好处是:降低对象与方法之间的耦合性。

  • 相关阅读:
    SpringMVC-------1.spriingMVC简介和简单案例
    MyBatis-----7.pageHelper分页助手
    MyBatis-----4.实现关联表查询
    MyBatis-----6.逆向工程(generator)
    MyBatis-----1.MyBatis简介和使用
    MyBatis-----2.通过映射接口实现CRUD
    Spring-2
    Spring-1
    php调用阿里云手机归属地查询
    php身份证验证
  • 原文地址:https://www.cnblogs.com/mysic/p/5384169.html
Copyright © 2020-2023  润新知