JS 的函数和方法区别在哪里?

2021-03-01 21:54:22 +08:00
 misakawaque

想花 3 天速览一下 js 所以用的菜鸟 看到函数的第三部分有点疑惑

百度的搜索结果看起来像乱码.......

3976 次点击
所在节点    JavaScript
36 条回复
Hoshinokozo
2021-03-02 10:06:30 +08:00
难道不是类或者对象内的成员函数就叫方法吗?
yaphets666
2021-03-02 10:08:22 +08:00
@marcong95 和 js 是一样的 Objcet.a() 和 a()的区别的 本质上没啥区别 都是数学意义上的函数
jadeborner
2021-03-02 10:18:29 +08:00
方法是指对象中的函数,可以用 this,全局的函数在严格模式下不能用 this
marcong95
2021-03-02 10:22:40 +08:00
@yaphets666 #22 对 OC 的记忆有点模糊了,我指的是[object a]跟 object.a(),印象中好像是有点区别的。而且编程的函数一般都不是数学意义的函数把,数学意义上的函数只是一个映射而已,并没有副作用。
chonerlee
2021-03-02 10:37:36 +08:00
我觉得楼主可以这样理解:同一个东西的两个名字,没有和任何对象关联的时候(调用:a())就叫函数,和任何对象有关联的时候(调用:obj.a())叫方法。
anjianshi
2021-03-02 10:41:47 +08:00
我觉得函数和方法,就是“人”和“工人”的关系:
- “方法”就是“函数”,当“函数”被放在某个类中时,我们会把它叫做“方法”,但其实它依然就是一个“函数”。
- “工人”是“人”,但在“工厂”这个场景下,我们把“人”称为“工人”,但他依然就是一个“人”
ubbcou
2021-03-02 11:18:32 +08:00
在《深入理解 es6 》第四章有这么以一句话:
在 ES6 之前,“方法”的概念从未被正式定义,它此前仅指对象的函数属性(而非数据属
性)。ES6 则正式做出了定义:方法是一个拥有 [[HomeObject]] 内部属性的函数,此内部
属性指向该方法所属的对象。
mascteen
2021-03-02 12:26:32 +08:00
@devwolf youtuber 这类视频很多,不过一般视频很长有几个小时
dk7952638
2021-03-02 13:08:02 +08:00
严格来说,函数是不能有副作用的,而方法则不然
WishMeLz
2021-03-02 13:52:24 +08:00
我的理解是:函数是 function,方法是 function 中有具体的业务代码逻辑。
IvanLi127
2021-03-02 14:52:50 +08:00
函数+过程=方法。我印象中是这么个样子,然后就不太理解楼主为啥有这疑惑出,是不是有什么语言背景?
journalistFromHK
2021-03-02 15:51:33 +08:00
js 万物皆对象 字符串、数字、函数都属于对象 而对象都有属性和方法,这些属性和方法也属于对象 没必要弄清对象和方法有什么区别 因为没意义
meteor957
2021-03-02 15:52:45 +08:00
没区别
ayase252
2021-03-02 15:58:11 +08:00
ECMA-262 定义:
Function: member of the Object type that may be invoked as a subroutine
Method: function that is the value of a property

方法是作为一个属性的值的函数
libook
2021-03-02 16:49:45 +08:00
个人认为方法是面向对象的一个子概念,一个对象的方法可以对这个对象进行操作或者进行一些和这个对象有关的操作。

函数就是对输入进行处理然后输出结果的过程。

举个例子,比如“下雨”;用方法来实现就是你需要先构造一个“雨”的 Class 或构造函数,然后在其原型上加一个“下”的方法;用函数的来实现就是构造一个通用的“下”函数,然后把“雨”作为参数传进去(当然你也可以传“雪”、“冰雹”、“馅饼”)。

从 JS 内部原理来说,方法和函数主要区别在于 this,即过程执行的环境。某种程度来说,方法也是一种函数,只不过方法的运行通常是以对象数据为基础的,方法的 this 为对象本身。
没有依赖于任何对象的,可以实现独立功能的函数,就是我们一般说的“函数”。

函数式编程和面向对象编程是两种思想,JS 两种都支持(可能写法和其他语言不大一样),如何认定也取决于开发人员自己的规划。
codeDreamfy
2021-03-02 16:53:15 +08:00
看你是如何使用的吧, 如果是挂载到某个对象的属性下,那就是方法,如果是独立使用那就是函数,不同场景叫法不同而已

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/757452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX