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
原文地址:https://www.cnblogs.com/vivenZ/p/6429585.html