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

 

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

 

转载于:https://www.cnblogs.com/xiaochechang/p/5740482.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值