zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Kafka2.0服务端写入和读取流程
    Kafka2.0服务端启动源码
    Kafka2.0消费者协调器源码
    Kafka2.0消费者客户端源码分析
    [六省联考2017]分手是祝愿 题解(期望dp)
    [信息学奥赛一本通oj1741]电子速度 题解
    [CSP-S模拟测试53]题解
    [CSP-S模拟测试52]题解
    [CSP-S模拟测试ex]题解
    [CSP-S模拟测试51]题解
  • 原文地址:https://www.cnblogs.com/vivenZ/p/6429585.html
Copyright © 2011-2022 走看看