• function类型


    创建函数的方法 

    var sum  =function(){}

    function sum(){}

    函数名其实 是一个包含函数的指针!!!所以一个函数可以有多个名字。

    在函数sum已经被赋值为Null时。kum仍然直线函数。

    一、函数声明与函数表达式

    函数声明会有一个函数声明提升的过程。在解析器读取的时候

    console.log(sum(1,2))   //3
        function sum(num1,num2) {
            return num1+ num2;
        }
        console.log(kum(1,2)); //kum is not a function
        var kum = function (num1,num2) {
            return num1+ num2;
        }

    为什么会这样,就是因为函数声明提升的过程。

    二、函数作为值

    当把函数作为值传递的时候,传的是函数名 也就是指针,所以不加()

    加()传递的就是函数执行后的结果了。

    function callName(someFunction,someArgument) {
            return someFunction(someArgument);
    
        }
        function add10(num) {
            return num +10;
        }
        var result = callName(add10,10)
        console.log(result); //20
        function getName(name) {
            return "hello " + name;
        }
        var result2 = callName(getName,"viven");
        console.log(result2) //hello viven

    三、函数的内部属性

    arguments  callee  caller

    arguments  callee阶乘函数

    function factorial(num) {
            if (num<1){
                return 1;
            }else{
                return num*arguments.callee(num-1);
            }
        }
        console.log(factorial(5)) //120
        var factorial1 = factorial;
        console.log(factorial1(5)); //120
        factorial =function (num) {
            return 0;
        };
        console.log(factorial(5)) //0
        console.log(factorial1(5)); //120

    解除函数的耦合

    caller 调用当前应用的函数的函数的引用

     四、属性和方法

    length
    表示函数希望接受参数的个数

    apply 传入两个参数  运行函数的作用域  和 参数数组,可以是Array实例,也可以是arguments对象

    function sum(num1,num2) {
            return num1 +num2;
        }
        function callSum1(num1,num2) {
            return sum.apply(this,[num1,num2]);
        }
        function callSum2(num1,num2) {
            return sum.apply(this,arguments);
        }
        console.log(callSum2(1,2)) //3
        console.log(callSum1(3,2)) //5

    call 传入两以上个参数  运行函数的作用域  和 每一个参数

    function sum(num1,num2) {
            return num1 +num2;
        }
        function callSum1(num1,num2) {
            return sum.call(this,num1,num2);
        }
        console.log(callSum1(3,2)) //5
    var color ="red";
        var o={color:"blue"};
        function sayColor() {
            console.log(this.color);
        }
        sayColor();  //red
        sayColor.call(this); //red
        sayColor.call(o)  //blue
    var color ="red";
        var o={
            color:"blue",
            sayColor:function() {
                console.log(this.color);
            }
        };
    
        o.sayColor();  //blue
        o.sayColor.call(window); //red
        o.sayColor.call(o)  //blue
  • 相关阅读:
    SQL Server 存储过程/触发器中调用COM组件的方法
    写入Stream
    Python 3.2 中adodbapi的问题
    Python中将系统输出显示在PyQt中
    动态创建 Lambda 表达式
    Entity Framework框架Code First Fluent API
    扩展IQueryable实现属性名称排序
    在Entity Framework中使用事务
    ASP.NET MVC:通过FileResult向浏览器发送文件
    ASP.NET MVC: 使用自定义 ModelBinder 过滤敏感信息
  • 原文地址:https://www.cnblogs.com/vivenZ/p/6429585.html
Copyright © 2020-2023  润新知