zoukankan      html  css  js  c++  java
  • JavaScript 函数引用和函数调用

    先看下面的代码:

     1 // 函数引用 代码一
     2 function f(){
     3     var x = 5;
     4     return x;
     5 }
     6 var a = f;
     7 var b = f;
     8 
     9 console.log(a===b); // true
    10 // 函数调用 代码二
    11 function f2() {
    12     var x = 5;
    13     return x;
    14 }
    15 var a2 = f2();
    16 var b2 = f2();
    17 console.log(a2 === b2);
    18 
    19 // 函数调用 代码三
    20 function f3(){
    21     var x = 5;
    22     return function(){
    23         return x;
    24     }
    25 }
    26 var a3 = f3();
    27 var b3 = f3();
    28 console.log(a3 === b3); // false

    以上代码:代码一是函数引用的例子,代码二是函数调用的例子,返回都为 true;代码三也是函数调用的例子,但是返回 false 。

    我们现在来理解下函数引用和函数调用的本质区别:

    当引用函数的时候,多个变量内存存储的是函数的相同的入口指针,因此对于同一个函数来讲,无论多少个变量引用,他们都是相等的。对于引用类型(对象,数组,函数等)比较的都是内存地址,如果他们内存地址一样的话,说明是相同的

    但是对于函数调用来讲,比如代码三,每次调用的时候,都被分配一个新的内存地址,他们的内存地址不相同,所以返回 false,但是对于代码二来讲,我们看到他们没有返回函数,只是返回数值,他们比较的不是内存地址,而是比较值,他们的值相等,所以返回 true

    我们也可以看看下面实列化一个对象的列子,他们也被分配到不同的内存地址,因此返回 false,如下代码测试:

    1 function F(){
    2     this.x = 5;
    3 }
    4 var a = new F();
    5 var b = new F();
    6 console.log(a === b); // false

     

    学习资源:理解函数引用和函数调用的区别

     

  • 相关阅读:
    mongodb 配置单实例与双实例
    redis 集群 搭建
    memcached 搭建
    公网yum 源地址
    jdk 安装
    activemq 搭建--集群
    zookeeper 安装
    activemq 安装-单点
    rabbitmq 集群
    python——网络编程
  • 原文地址:https://www.cnblogs.com/xiaochechang/p/5740482.html
Copyright © 2011-2022 走看看