Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 在Node.js中使用“require()”时会发生什么?_Javascript_Node.js - Fatal编程技术网

Javascript 在Node.js中使用“require()”时会发生什么?

Javascript 在Node.js中使用“require()”时会发生什么?,javascript,node.js,Javascript,Node.js,如果这是一个愚蠢的问题,很抱歉,但我是JavaScript/Node.js新手。下面的代码让我摸不着头脑,我做了不少研究。。。我下面的问题更具体地与实例化相关 我不明白这一点: 我是如何看待实例化的: 匿名函数表达式的使用方式: 如果单词require充当一种匿名函数表达式,那么在后台是如何实例化的?这对于制作正确的图案非常重要,不是吗 我的问题是: 在第一个示例的背景中发生了什么,JavaScript/Node.js是否正在实例化/构造? 这样做的人只是在制造坏模式吗?我为什么要使用这种模式?

如果这是一个愚蠢的问题,很抱歉,但我是JavaScript/Node.js新手。下面的代码让我摸不着头脑,我做了不少研究。。。我下面的问题更具体地与实例化相关

我不明白这一点:

我是如何看待实例化的:

匿名函数表达式的使用方式:

如果单词require充当一种匿名函数表达式,那么在后台是如何实例化的?这对于制作正确的图案非常重要,不是吗

我的问题是:

在第一个示例的背景中发生了什么,JavaScript/Node.js是否正在实例化/构造? 这样做的人只是在制造坏模式吗?我为什么要使用这种模式? 如果没有实例化,为什么不呢?
提前感谢

只需将库或模块加载到脚本中即可。它不是实例化一个新对象。它只是使加载的模块的函数等可用于当前脚本。这是我找到的一篇好文章,
我希望这有助于回答你的问题

只需将库或模块加载到脚本中即可。它不是实例化一个新对象。它只是使加载的模块的函数等可用于当前脚本。这是我找到的一篇好文章, 我希望这有助于回答你的问题

const myVar=requiresMemodule从文件系统加载模块,运行模块初始化代码,并将模块导出分配给变量。模块加载子系统维护一个缓存,因此如果以前加载过,则不会再次加载或运行,模块的导出只会从缓存中检索并分配给变量

因此,当您这样做时:

var myApp = require('express');      // load express module, assigns exports to myApp
var myCode = myApp();                // calls myApp() function and assigns result to myCode
第一行加载express模块,并将该模块的导出分配给myApp变量。在这种特殊情况下,它因模块而异,Express模块的导出是一个函数。因此,在第一行代码之后,myApp包含一个函数,该函数恰好是用于创建新的Express app对象的工厂函数

第二行代码调用工厂函数,该函数返回一个新的Express app对象

模块可以导出它想要的任何内容。在上面的例子中,它导出了一个函数,但是导出一个对象,该对象有一大堆属性,您可以访问这些属性,这也是很常见的。您还可以导出一个构造函数,在这种情况下,调用方将使用new和构造函数来从中创建一个新对象

在Express模块中,它没有导出构造函数,这就是为什么不使用new。相反,它决定导出一个工厂函数,该函数在被调用时创建并返回一个新对象。这仅仅是一个设计决策,可以根据模块的需要和代码编写者的突发奇想进行选择

我真的不知道你在问这个代码:

var myApp = new Express();          // the express module does not export a constructor
var myCode = myApp.insideExpress();
只有当Express是一个构造函数时,这才有效。express模块本身不选择导出构造函数,因此这不是使用express模块的方式。它本可以这样设计,但事实并非如此。他们只是在设计时做出了不同的设计决策

对于另一种情况,您可以显示:

var myApp = function();
var myCode = myApp();
第一行代码没有任何意义。也许你的意思是让它有一个身体的功能:

var myApp = function() { some code here };
var myCode = myApp();
在这种情况下,将为myApp分配一个函数表达式,这只是声明函数的几种方法之一。这是相似的,但并不完全相同:

function myApp() { some code here }
如果单词require充当一种匿名函数表达式,那么在后台是如何实例化的?这对于制作正确的图案非常重要,不是吗

require'someModule加载一个模块并返回来自该模块的导出,该导出可以是任何Javascript数据类型。它不以任何方式充当匿名函数。require是一个实际的函数,您只需调用它并返回它的返回值。请记住,在Javascript中,您可以从函数返回任何数据类型,包括返回另一个函数,这是express模块所做的

在第一个示例的背景中发生了什么,JavaScript/Node.js是否正在实例化/构造

没有实例化或构造。它只是加载一个模块,运行其初始化代码并返回其导出。一些对象是由模块加载系统创建的,用于其自身的管理,但模块本身只是初始化自身,然后决定要导出什么

这样做的人只是在制造坏模式吗?我为什么要使用这种模式

模块在node.js开发中非常有用,使用适当的模块设计被认为是良好的设计。好的模块设计有很多优点,例如更容易的代码维护、更容易的代码测试、更容易的代码重用、更容易的代码共享、无需重新部署 ed创建全局文件以共享代码等

如果没有实例化,为什么不呢

模块决定要导出的内容。它可以在其初始化代码中创建对象的实例并将其导出。它可以导出在调用时创建对象实例的工厂函数。它可以直接导出一个构造函数,让调用方使用new来创建对象的实例。它可以导出只执行某些功能而不创建任何对象的实用函数。它只能导出数据。它可以导出一个包含多个属性的普通对象,这些属性具有各种可能的用途。可能性是无穷的,完全取决于模块的用途以及它希望与加载它的其他模块共享的内容。

const myVar=requiresMemodule从文件系统加载模块,运行模块初始化代码,并将模块导出分配给变量。模块加载子系统维护一个缓存,因此如果以前加载过,则不会再次加载或运行,模块的导出只会从缓存中检索并分配给变量

因此,当您这样做时:

var myApp = require('express');      // load express module, assigns exports to myApp
var myCode = myApp();                // calls myApp() function and assigns result to myCode
第一行加载express模块,并将该模块的导出分配给myApp变量。在这种特殊情况下,它因模块而异,Express模块的导出是一个函数。因此,在第一行代码之后,myApp包含一个函数,该函数恰好是用于创建新的Express app对象的工厂函数

第二行代码调用工厂函数,该函数返回一个新的Express app对象

模块可以导出它想要的任何内容。在上面的例子中,它导出了一个函数,但是导出一个对象,该对象有一大堆属性,您可以访问这些属性,这也是很常见的。您还可以导出一个构造函数,在这种情况下,调用方将使用new和构造函数来从中创建一个新对象

在Express模块中,它没有导出构造函数,这就是为什么不使用new。相反,它决定导出一个工厂函数,该函数在被调用时创建并返回一个新对象。这仅仅是一个设计决策,可以根据模块的需要和代码编写者的突发奇想进行选择

我真的不知道你在问这个代码:

var myApp = new Express();          // the express module does not export a constructor
var myCode = myApp.insideExpress();
只有当Express是一个构造函数时,这才有效。express模块本身不选择导出构造函数,因此这不是使用express模块的方式。它本可以这样设计,但事实并非如此。他们只是在设计时做出了不同的设计决策

对于另一种情况,您可以显示:

var myApp = function();
var myCode = myApp();
第一行代码没有任何意义。也许你的意思是让它有一个身体的功能:

var myApp = function() { some code here };
var myCode = myApp();
在这种情况下,将为myApp分配一个函数表达式,这只是声明函数的几种方法之一。这是相似的,但并不完全相同:

function myApp() { some code here }
如果单词require充当一种匿名函数表达式,那么在后台是如何实例化的?这对于制作正确的图案非常重要,不是吗

require'someModule加载一个模块并返回来自该模块的导出,该导出可以是任何Javascript数据类型。它不以任何方式充当匿名函数。require是一个实际的函数,您只需调用它并返回它的返回值。请记住,在Javascript中,您可以从函数返回任何数据类型,包括返回另一个函数,这是express模块所做的

在第一个示例的背景中发生了什么,JavaScript/Node.js是否正在实例化/构造

没有实例化或构造。它只是加载一个模块,运行其初始化代码并返回其导出。一些对象是由模块加载系统创建的,用于其自身的管理,但模块本身只是初始化自身,然后决定要导出什么

这样做的人只是在制造坏模式吗?我为什么要使用这种模式

模块在node.js开发中非常有用,使用适当的模块设计被认为是良好的设计。好的模块设计有很多优点,比如更容易的代码维护、更容易的代码测试、更容易的代码重用、更容易的代码共享、不需要创建全局代码来共享代码等等

如果没有实例化,为什么不呢

模块决定要导出的内容。它可以在其初始化代码中创建对象的实例并将其导出。它可以导出在调用时创建对象实例的工厂函数。它可以直接导出一个构造函数,让调用方使用new来创建对象的实例。它可以导出只执行某些功能而不创建任何对象的实用函数。它只能导出数据。它可以输出一个简单的
对象上有多个属性,这些属性具有各种可能的用途。可能性是无限的,这完全取决于模块的用途以及它希望与加载它的其他模块共享什么。

我想我刚刚意识到JavasScript的全局范围只能取决于代码所在的当前JS文件。我还是JS新手,在这种情况下,公平地说,只要模块是从不同的文件导入的,它就有点实例化了?@Alex-模块已经加载了。如果您愿意,可以将其称为某种实例化,但这里的loaded是正确的技术术语。模块可以实例化也可以不实例化您可以使用的对象。有些模块只包含一些函数,这些函数只执行加密文本块之类的任务,与对象或实例化无关。@Alex-每个模块都有自己的局部作用域。有一个单独的全局作用域,但除了运行时内置的函数(如setTimeout)外,很少使用它。好的node.js代码通常不会把东西放在全局范围内,因为它通常是不必要的。我想我刚刚意识到JavasScript的全局范围只能放在代码所在的当前js文件中。我还是JS新手,在这种情况下,公平地说,只要模块是从不同的文件导入的,它就有点实例化了?@Alex-模块已经加载了。如果您愿意,可以将其称为某种实例化,但这里的loaded是正确的技术术语。模块可以实例化也可以不实例化您可以使用的对象。有些模块只包含一些函数,这些函数只执行加密文本块之类的任务,与对象或实例化无关。@Alex-每个模块都有自己的局部作用域。有一个单独的全局作用域,但除了运行时内置的函数(如setTimeout)外,很少使用它。好的node.js代码通常不会把东西放在全局范围内,因为它通常是不必要的。这个链接很棒!在module.js下,每个文件都有一个新实例。这就是为什么我们不需要手动操作。澄清了我所有的问题。谢谢。这个链接很棒!在module.js下,每个文件都有一个新实例。这就是为什么我们不需要手动操作。澄清了我所有的问题。谢谢