• 如何理解Javascript中的函数(Function)


    Function类型

    首先得知道,每个函数都是Function类型的实例,所以函数本身是对象。
    示例1:

    function sum (num1, num2){
        return sum1 + sum2;  
    }
    

    示例2:

    var sum = function(num1, num2){
        return num1 + num2;
    }
    

    本质上这两种定义函数的方式没什么差别。因为函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
    定义一个函数可以理解为:函数名是变量,函数是对象,函数名是指向函数的指针,与其他变量没什么不同。

    没有重载(深入理解)

    看个例子:

    function add(num1){
        return num1+100
    }
    
    function add(num2){
        return num2+200
    }
    var result = add(100);    //300
    

    这个例子中声明了两个同名函数,结果则是后面的函数覆盖了前面的函数。可以理解为定义了一个变量add 指向一个function, 然后又改变了这个变量add指向了另一个function,所以只有最后的function生效。

    函数属性和方法

    每个函数都包含两个属性:length和prototype。其中,length属性表示函数希望接收的命名参数的个数。

    function sayName(){
        alert(name);
    }
    function sum(num1, num2){
        return num1 + num2;
    }
    function sayHi(){
        alert('hi');
    }
    console.log(sayName.length);    //1
    console.log(sum.length);    //2
    console.log(sayHi.length);    //0
    

    每个函数都包含两个非继承而来的方法:call() 和 apply()
    apply() 方法接收两个参数,一个时在其中运行函数的作用域,另一个是参数数组。
    call() 方法接收的第一个参数也是在其中运行函数的作用于,其他的参数必须逐个列举出来。
    ES5还定义了一个方法:bind()。这个方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。
    详细了解这三个函数,请去查看js中函数的this指向相关内容。

    函数内部属性

    在函数内部,有两个特别的对象:arguments和this。 arguments的主要用途是保存函数参数,但这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。

    有疑问或者问题,请留言,本人常在回复比较及时。
    作者:Cirry
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HTTPD之五---HTTP协议、相关工具及状态码
    HTTPD之四----实现HTTPD正向代理与反向代理
    第十三周---DNS原理、实现智能DNS及源码编译mariadb数据库
    DNS之五----实现智能DNS
    sqoop 导入增量数据到hive
    Hadoop 二次排序
    Spark foreachpartiton和mappartition的异同
    hadoop 实现多文件输出
    spark 实现多文件输出
    Scala 中 call by name & call by value 的区别
  • 原文地址:https://www.cnblogs.com/cirry/p/12637406.html
Copyright © 2020-2023  润新知