Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Performance_Architecture - Fatal编程技术网

Javascript 来自函数参数的数据与指定变量的数据之间是否存在性能差异?

Javascript 来自函数参数的数据与指定变量的数据之间是否存在性能差异?,javascript,performance,architecture,Javascript,Performance,Architecture,这听起来像是一个noob问题,但接下来是; 基本上,我将大量数据从一个对象传递到另一个对象。下面是一个简化的例子 // Example 1 function Person(hugeData) { this.info = function() { console.log(hugeData); } } Homer = new Person(hugeData); Homer.info(); //例1 功能人员(hugeData){ this.info=函数(){ 控制台

这听起来像是一个noob问题,但接下来是; 基本上,我将大量数据从一个对象传递到另一个对象。下面是一个简化的例子

// Example 1 function Person(hugeData) { this.info = function() { console.log(hugeData); } } Homer = new Person(hugeData); Homer.info(); //例1 功能人员(hugeData){ this.info=函数(){ 控制台日志(hugeData); } } 荷马=新人(胡格达塔); Homer.info(); 相比

// Example 2 function Person() { var hugeData; this.set = function(data) { hugeData = data; } this.info = function() { console.log(hugeData); } } Homer = new Person(); Homer.set(hugeData); Homer.info(); //例2 职能人员(){ 胡格达变种; this.set=函数(数据){ hugeData=数据; } this.info=函数(){ 控制台日志(hugeData); } } 荷马=新人(); 荷马系列(hugeData); Homer.info(); 这两个代码段在性能方面是否有很大差异?请关注示例的上下文,而不是代码本身(设置对象变量与传递参数)

虽然上面的例子是针对Javascript的,但我也想知道同样的原则是否适用于其他编程语言,如PHP

谢谢。

不,一点也不

现在,形式参数和局部变量都存储在所谓的激活对象(在ES3中)或词法环境记录(ES5)中

因此,访问时间应该是相同的规格


如果您想了解详细信息,请签出:



Testcase:

通过变量传递是最好的选择。因为很明显,庞大的数据并不是一个原语,所以只在函数上下文中引用它。
看看詹迪的回答

在这种情况下很难概括,因为Javascript的每个实现都是不同的


我可以想象,当你通过创建一个对象来传递一大块数据时,你正在节省内存的重新分配,当你先创建一个数据很少的对象,然后再向它添加大量数据时,就会发生这种情况。但是大多数JS实现无论如何都会将大数据块存储在引用中,因此它不太可能真的重要。

我想你的问题主要是这一行是否

hugeData=数据

。。。在您的代码中可能会影响性能

答案是不,不是(至少不会影响应用程序的性能)

如果
hugeData
引用了一个对象(记住JS中的数组本质上是对象),那么它实际上只存储了对这个对象的引用。引用是将被复制的内容,而不会复制对象的内容


如果
hugeData
指的是字符串,那么它可能会更复杂一些。。。但据我所知,大多数现代浏览器(例如check)现在都实现了“写时复制”技术。换句话说,字符串在这里也不会重复。

性能问题应该由您自己的研究和测试结果支持。你有没有试着在一个循环中同时计时?你的结果是什么?然后我们可以试着运行相同的代码(它必须是可运行的),并比较和讨论我们的结果。它是一个对象;要指定的视图模型对象