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
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/vivenZ/p/6429585.html
Copyright © 2011-2022 走看看