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 - Fatal编程技术网

Javascript 局部变量与参数

Javascript 局部变量与参数,javascript,performance,Javascript,Performance,上述代码在效率方面有什么不同吗 param变量已经是一个局部变量,因此这两个代码段之间的唯一区别是第一个代码段创建了param变量的无用副本。没有区别。参数只是一个局部变量,在调用时用传递的参数初始化 但是,如果要更改变量的值,通常认为保持参数变量不变是一种良好的做法,这仅仅是出于可读性和可维护性的原因。是的,如果参数变量保留对象的值,则存在一个非常显著的差异。如果您的参数变量持有一个对象的值,然后您在传递函数中的任何位置修改参数变量对象,那么它的值将在任何地方都会更改,因为在javascrip

上述代码在效率方面有什么不同吗

param
变量已经是一个局部变量,因此这两个代码段之间的唯一区别是第一个代码段创建了
param
变量的无用副本。

没有区别。参数只是一个局部变量,在调用时用传递的参数初始化


但是,如果要更改变量的值,通常认为保持参数变量不变是一种良好的做法,这仅仅是出于可读性和可维护性的原因。

是的,如果参数变量保留对象的值,则存在一个非常显著的差异。如果您的参数变量持有一个对象的值,然后您在传递函数中的任何位置修改参数变量对象,那么它的值将在任何地方都会更改,因为在javascript中将对象作为参数传递时,它是通过引用传递的,而不是通过值传递的

请看下面的代码片段来理解我的意思

function doIt(param) {
   var localVar = param;
   //do lots of stuff with localVar
}

function doIt(param) {
   //do lots of stuff with param
}

甚至没有。任何好的编译器都应该去掉中间死变量(比如param)。如果你发现了一个不同点(我在Firefox和Opera上得到了有趣的结果),不管怎样,它都可以忽略不计。
function someTask (paramter) {
    //some long task
    paramter.color = 'Red';
    //some other task
}

function main() {

    let fruit = {
        name: 'Mango',
        color: 'Yellow'
    }
    someTask(fruit)
    console.log(fruit)
}


main()

//Outputs: { name: 'Mango', color: 'Red' }