Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 普通函数与直接函数的效率?_Javascript - Fatal编程技术网

Javascript 普通函数与直接函数的效率?

Javascript 普通函数与直接函数的效率?,javascript,Javascript,有人提到即时或自动执行函数必须存储整个堆栈。这是真的吗?如果是的话,使用模块模式(基于即时函数)和普通函数的优缺点是什么 函数本质上是私有的,但您可以返回您想要公开的项目,因此它可以处理隐私 我看到的主要区别是,您没有全局导入功能,也没有能力确保开发人员(等等,就是我)在函数中使用new(或者它很复杂) 一般来说,当试图提供隐私时,说明什么时候应该使用模块模式,什么时候应该只使用普通功能 第二个次要问题是,函数在与new一起使用时是否提供状态?任何函数闭包都会持续存在,因为其中存在对变量或函数的

有人提到即时或自动执行函数必须存储整个堆栈。这是真的吗?如果是的话,使用模块模式(基于即时函数)和普通函数的优缺点是什么

函数本质上是私有的,但您可以返回您想要公开的项目,因此它可以处理隐私

我看到的主要区别是,您没有全局导入功能,也没有能力确保开发人员(等等,就是我)在函数中使用new(或者它很复杂)

一般来说,当试图提供隐私时,说明什么时候应该使用模块模式,什么时候应该只使用普通功能


第二个次要问题是,函数在与new一起使用时是否提供状态?

任何函数闭包都会持续存在,因为其中存在对变量或函数的持久引用,并且会占用一些内存。在今天的计算机(甚至是手机)中,除非你不知何故重复了数千次,否则内存量通常是微不足道的。因此,使用语言功能解决设计问题通常比担心内存量更重要

当您说“整个堆栈”时,顶级自执行函数的调用堆栈非常小。除了调用的一个函数之外,堆栈上没有其他任何东西

函数也是一个对象。因此,当它与
new
一起使用时,它会创建一个新对象,如果您为这些属性赋值,该对象可以具有状态(它的属性)。这是在javascript中创建对象的主要方式之一。您可以调用函数并检查其返回值,也可以将其与
new
一起使用,该函数充当新对象的构造函数。一个给定的函数通常被设计成以一种或另一种方式使用,而不是同时以两种方式使用

模块模式通常用于控制哪些变量是公共的,以及在将它们公开时将它们放入使用很少顶级全局变量的结构化命名空间中。它不是你真正选择的东西,而不是自动执行的函数,因为它们不能真正解决同样的问题。您可以在此处阅读有关模块模式的更多信息:

你们可以在这里阅读一些选项:和

根据一个试图解决的特定问题或一个特定的设计问题来讨论一种技术的优缺点要比一般性的讨论更容易,而不是当你所问的事情并没有真正解决相同的问题时,一般性的讨论哪个更好


我所知道的关于受保护和私有成员(可以侵入javascript,但不是核心语言功能)的最佳参考是:。当您使用此方法而不是该语言的默认原型功能时,您正在进行权衡,但是如果您确实需要,您可以实现隐私。但是,您应该知道,javascript的构建并没有考虑到私有或受保护的方法,所以为了获得这种级别的隐私,您使用了一些关于如何编写代码的约定。

+1用这么多的话说“这不重要”<代码>;-)@gdoron-OP确实有五个有点令人困惑的问题,他们问了一些类似问题的问题,所以我试着解决每一个问题-虽然没有一个问题是特别明确的,所以很难简短。@jfriend..我想用私有和公共成员编写面向对象的代码,作为我编写代码的实际方式。这有两个原因。1.)这是在著名的CS学位课程中作为最佳实践教授的,是编写代码的最佳方式。这就是现代代码的编写方式。2)虽然它通常是用C++和java等编译语言来教的,在这里你只需定义一个类,并明确声明私有和公共成员,我仍然想将这个概念应用到JavaScript…3。这是我个人偏好如何设计我的代码,我相信……该语言将支持简单的隐私……我选择不使用继承……因为我个人认为它过于复杂……在不久的将来,JavaScript将支持更纯粹的类模型,包括类、公共和私有成员。如果我的代码已经是这种“形式”,那么将代码更新到这种新的JavaScript会更容易…所以我的问题是,在对象中实现隐私的最佳方法是什么…很简单,我正在寻找一种方法…我不想在每次编写类时都思考如何创建私有和公共成员…对于一些应该明确表示为“类”、“私有”和“公共”的内容来说,这是浪费时间,我已经看过不少于10个一件事的实现。