JS中函数的调用、引用有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中函数的调用、引用有啥区别?相关的知识,希望对你有一定的参考价值。

正在学JS,《精通javascript(第2版)》这本书中提到了调用、引用,但是没多解释。谁能解答?高手帮帮忙


网页
问问
科学
知识
更多

搜索
JS中函数的调用、引用有什么区别?
1、函数的调用简单点解释其实就是函数的使用,即你写好了这个函数,然后要让它发挥作用的时候,就通过函数的调用来呈现出来,比如你要计算1+2的值,你就可以封装个计算的方法(函数也叫方法),如:function sum(a,b)return a+b;然后你就可以通过sum(1,2)调用的方式来算出计算结果;
2、对于函数的引用,我觉得准确点讲应该是叫函数的引用数据类型吧。在js里面,他分为两种大的数据类型:基本数据类型:(1)Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值...

搜狗问问
查看更多
4
反馈
JS中函数的调用、引用有什么区别?的相关内容_知乎
Javascript中调用一个函数(对象),使用new或者直接调用有什...
如果是最典型的构造函数模式,必须加上new:function Man(age) this.sex="male"; this.age=age; m1=Man(20); m2=new Man(21); m1就是函数Man()执行的返回值,也就是undefined. 在函数执行过程中,属性被加到全局作用域或者Man方法所...

6个回答
javascript函数的调用模式有哪几种?
2个回答
2017-08-06
JavaScript 中立即调用的函数表达式,有什么独特优势?主要在什...
10个回答
2013-01-18
知乎
查看更多
JS中函数的调用、引用有什么区别?_CSDN博客
JavaScript 函数调用的四种方式与区别_weixin_33939380的博客-...
在JavaScript中函数有4种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply(call)调... //以函数的方式调用change;//以方法的形式调用changeName.myObj.changeName();console.log(...

2016-11-09
JS中的函数调用区别_Silence_JK的博客-CSDN博客
2016-12-05
javaScript函数的4种调用方法详解_山顶的小树苗-CSDN博客
2017-02-22
CSDN博客
查看更多
JavaScript中函数引用调用和函数直接调用的区别 - Lowki - 博客园
作为一门极其灵活而又混沌的语言,js不会允许这种情况发生,于是ES6这一标准提出了箭头函数的... 引用函数其实也是一个包装过的概念,比如本例中的 f ,它的本质只是栈内存的索引地址,更重要的...
博客园
88%的人还搜了
调用函数引用数组函数里有参数该怎么调用
c语言数组的引用数组为参数的函数调用
c语言数组怎么用js自调用函数的含义
函数调用数组函数的调用如何传递数组
js中函数的调用、引用有什么区别?_视频

09:08
Javascript教程-07-JavaScript中函数声明与调用
动力节点Java学院
2020-06-02

17:09
【学JavaScript看这个就够了】第四天15-函数调用栈的理解
叩丁狼stef
2020-02-02

10:15
【学JavaScript看这个就够了】第四天02-函数的定义和调用
叩丁狼stef
2020-02-02

11:05
【学JavaScript看这个就够了】第四天12-函数的递归调用
叩丁狼stef
2020-02-02

07:32
js023-function函数的定义和调用
oeasy
2020-01-20

04:58
js040-猜数字 判断大小 函数调用
oeasy
2020-01-20

04:57
js049-函数嵌套调用 输出网页换行符
oeasy
2020-01-20

05:46
js033-带参数的函数定义和调用 判断是否是整数
oeasy
2020-01-20
查看更多
搜狗视频
查看更多
javascript中的引用和调用函数的区别是什么? - html中文网
javascript中的引用函数和调用函数的区别是什么?下面本篇文章给大家介绍一下JavaScript中的引用函数、调用函数的区别。有一定的参考价值,有
www.html.cn
js中函数的调用、引用有什么区别?_约739个回答_搜狗知识
js中的函数名 -- 引用地址到底是什么意思 ?
[最佳答案] js 中的函数也是一种对象(Function类型的对象),函数名有两种:常量函数名 function fnname(……)……变量函数名 var fnname=function(……)……; // 将一个匿名函数赋值给一个变量由于函数也是对象,你甚...
搜狗问问
2016-12-04
JavaScript 函数调用的四种方式与区别
搜狗问问
2018-11-16
js中函数用new和直接调用的区别
搜狗问问
2016-11-07
搜狗知识
查看更多
JavaScript中判断函数是new还是()调用的区别说明_javascript技巧_...
具名函数的各种调用方式 在之前篇幅中已经介绍过了。这篇看看如何判断一个函数是被new调用的,还是被其它方式调用的。
脚本之家
js 函数 引用是什么-和js 函数 引用相关的问题-阿里云开发者社区
标签的onclick事件上引用下面的js里面的函数 问题 js事件监听中传递匿名函数与具名函数的区别,都... 让远程js知道它应该调用的本地函数叫什么名字,只要服务端提供的js脚本是动态生成的就好了,这...
阿里云
js里函数调用的四种模式 - 简书
关键字来调用,那么 js 会创建一个 prototype 属性是此函数的一个新对象,同时在调用这个函数的时... 有什么区别呢?就我个人看来,没啥鸟区别。。。开玩笑!刚刚说了,上面 apply() 接收两个参数...
简书
JavaScript函数调用是什么-和JavaScript函数调用相关的问题-阿里云开...
关于javascript中callback函数的疑问 a123456678 1006 浏览量 回答数 1 回答 如何实现 JavaScript ... 多谢你的解释 引用来自“wuyiw”的评论 第一个,a.b()仅仅是调用了b函数,函数里面的this指向a...
阿里云
下一页

用搜索APP,让搜索一触即得
立即下载
相关搜索
怎么调用参数是数组的方法js调用函数的几种方法
c语言中引用调用函数函数的形参为数组指针
js自定义函数的调用实例c 数组怎么用声明函数
js调用自己定义的函数函数调用过程
c语言如何调用外部数组c语言函数调用例子

搜索
首页-导航- 免责-用户反馈
© 2020 SOGOU.COM
参考技术A 刚进入行业的时候,我都是很少去思考这些看似简单而且见效慢的东西,直到几年前也就是我入行差不多两年的时候,我发现我的工作开始让我去思考这些细致的点了,然而,我发现搞懂这些知识点和学习一个框架什么的同样有意思。

下面转到这篇的正题。

如果你正在看这篇文章,那我们的目的就是一个:理清函数引用和函数调用的本质区别。其实很简单,下面我举几个例子,通过分析结果,大伙一下就会知道他们的区别了。

一、函数引用

运行结果:

g1:true

由上图看到,我们将函数g1赋值给了h1和k1两个变量。然后比较这两个变量,结果返回的是true。首先,对于引用类型(包括对象,数组,函数等)都比较的是内存地址,如果他们内存地址一样的话,说明是相同的。这里,当引用同一个函数的时候,不管多少个变量,内存存储的都是该函数相同的入口指针,内存地址相同,所以他们的比较是相等的。

二、函数调用

运行结果:

g2:true

由上图看到,我们将g2函数调用了两次,分别返回给了h2和k2两个变量。结果比较也是true。在看一个例子

运行结果:

g3:false

由上图看到,我们将g3函数调用了两次,分别返回给了h3和k3两个变量。结果比较也是false。由这两个例子可以得出一个结论:对于函数调用来讲,如果每次调用后返回的是一个函数,就需要分配一个新的内存地址,所以他们的内存地址不相同,因此,如第二个例子一样返回false。但假如每次调用后返回的是一个数值,他们比较的就不是内存地址,而是比较值,所以如例子一一样,返回的是就是true。

下面进一步证明函数引用的概念

我们知道JavaScript有构造函数实例化生成函数的概念,生成的每一个新函数赋值的都是一个新的引用,他们会被分配到不同的内存地址,比如:

上面这个例子就输出false。这也就进一步加深了对函数引用的理解。

三、写在最后的总结
函数引用存储的是一个指针,同一个函数的这个指针是相同的,而对于函数调用来说,同一个函数调用,如果调用后返回的是一个值,则比较的是值,如果返回的是一个函数,那每次返回的函数都需分配一个内存地址,(对于引用类型来说)比较内存地址自然不会相同。
参考技术B 调用是 invoke,引用是 reference。
题主知道值类型和引用类型的区别吗?如果还不清楚,那么建议把书从头读。JS 中的函数是一种引用类型。
调用就是执行了这个函数。
参考技术C 1、函数的调用简单点解释其实就是函数的使用,即你写好了这个函数,然后要让它发挥作用的时候,就通过函数的调用来呈现出来,比如你要计算1+2的值,你就可以封装个计算的方法(函数也叫方法),如:
function sum(a,b)return a+b;然后你就可以通过sum(1,2)调用的方式来算出计算结果;
2、对于函数的引用,我觉得准确点讲应该是叫函数的引用数据类型吧。在js里面,他分为两种大的数据类型:基本数据类型:(1)Number、String、Boolean、Null、 Undefined、Symbol(ES6),这些类型可以直接操作保存在变量中的实际值。(2)引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,所以函数是对象,正则表达式也是对象)。对于这个的区别和理解可以参考这篇博客基本数据类型和引用数据类型区别

函数调用和函数引用有啥区别?

【中文标题】函数调用和函数引用有啥区别?【英文标题】:What is the difference between a function call and function reference?函数调用和函数引用有什么区别? 【发布时间】:2013-03-30 22:59:55 【问题描述】:

我有以下功能

function hello() 
 alert("hi!");

获取这段代码:

var elem = document.getElementById("btn");
elem.onclick = hello;

我的问题可能有点难以理解,请耐心等待: 这段代码与普通调用有什么区别,或者是什么让这段代码需要对函数变量的引用而不是常规调用? (hello();)

我如何知道我应该在哪里引用该函数,以及何时应该实际调用它?

【问题讨论】:

我可能是错的,这些动态语言的新手(刚开始研究 python),但我认为参考是当你想为所述函数创建别名时,调用实际上是你想要的称呼。 (例如,var = hello 然后 var() 与在调用 var() 的任何地方调用 hello() 相同 相关:In JavaScript, does it make a difference if I call a function with parentheses?. 【参考方案1】:

好吧,onclick 属性需要一个对函数的引用,以便在单击元素时执行它。通常是:

element.onclick = funcRef;

element.onclick = function () 
    funcRef();
;

(当然,最好使用addEventListenerattachEvent

注意它们都是对函数的引用,而不是调用。

当某物需要引用时,您不会调用它...您为它分配引用(第一个示例)。

当你想专门调用一个函数时,你用() 调用它(第二个例子)。但请注意,在第二个示例中,仍然有一个对分配给 onclick 的函数的引用——它只是一个匿名函数。

可能是更重要的部分:

有些人认为你想这样做:

element.onclick = funcRef();

但这会立即执行函数(因为()),并将其返回值分配给onclick。除非返回值一个函数,否则这不是你想要的。

我认为这个故事的寓意是,当您想要/需要立即执行某些操作时,您可以调用该函数。如果需要该函数以供以后使用或需要存储,则不要调用它。

【讨论】:

立即执行位非常重要。 @Wex 哈哈是的,我似乎破坏了它。尝试思考如何进一步扩展它 有一个有趣的角落案例:element.onclick = getClickHandler() @JanDvorak 这可能不太明显,但我已经包括“除非返回值是一个函数,否则这不是你想要的。”我不想走得太远,以防它混淆 OP @frrlod 当然! ***.com/questions/6348494/addeventlistener-vs-onclick【参考方案2】:

您希望它现在执行吗?然后调用它。

a=hello() 表示“尽快调用hello(),并将其返回值设置为a”。

另一方面,a=hello 表示“ahello 的别名。如果您调用a(),您将得到与调用hello() 相同的结果”

你将后者用于回调等,你想告诉浏览器你想在事件发生后发生什么。例如,您可能想说“当用户单击时呼叫hello()”(如示例中所示)。或者,“当 AJAX 查询返回结果时,对返回的数据调用 callback() 函数”。

【讨论】:

【参考方案3】:

我如何知道我应该在哪里引用该函数,以及何时应该实际调用它?

您需要现在运行该函数吗?

比添加()来执行它

是否需要函数被引用以便稍后调用它?

不要添加 ()。

【讨论】:

【参考方案4】:

无论它如何被调用,都需要某处对你的函数的引用。这里的区别在于您没有显式调用hello 函数。您正在将对该函数的引用分配给elem DOM 节点的onclick 事件处理程序,这样当为该节点触发onclick 时,您的函数就会被调用。

【讨论】:

【参考方案5】:

JavaScript 中几乎所有的语句都有返回值。除非另有说明,否则 JavaScript 中的函数在调用时将返回 undefined。因此,如果要返回一个函数,则在此赋值语句中调用您的函数是有意义的唯一上下文:

function hello() 
    return function() 
        alert("hi!");
    


elem.onclick = hello();

【讨论】:

【参考方案6】:

hello() 表示你调用了那个函数,表示函数会被直接执行。

当您有 elem.onclick = hello 时,这称为回调。 hello 不会直接执行,但只有在触发某个事件时(在这种情况下,当点击元素时)

【讨论】:

以上是关于JS中函数的调用、引用有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

引用传递和引用调用有啥区别?

js中new创建对象时带括号和不带括号有啥区别

js函数引用函数调用与回调函数

返回函数调用与仅在递归期间再次调用函数有啥区别?

在我用于测试的 js 文件中。我将发送交易调用到智能合约,那么 value 和 gas 之间有啥区别:

pass by value和pass by reference在C++中有啥区别?