[英]Why function does not change the array?
考虑以下JavaScript代码:
function myArr(arr){
arr = arr + arr;
return arr;
}
var arr = new Array(1,3,2,5);
myArr(arr);
document.write(arr); // Output : 1,3,2,5
arr = arr + arr;
document.write(arr); // Output : 1,3,2,51,2,5
当函数内部和外部执行相同操作时,为什么函数myArr()
返回相同的数组?
为什么使用相同的操作语句在这里显示两种不同的行为?
因为您没有将myArr()方法返回的值分配给变量。 它应该是arr = myArr(arr);
而不是myArr(arr);
尝试跟随,
function myArr(arr){
arr = arr+arr;
return arr;
}
var arr = new Array(1,3,2,5);
arr = myArr(arr);
document.write(arr);// It should give Output : 1,3,2,5,1,3,2,5
var arr = new Array(1,3,2,5);
arr = arr+arr;
document.write(arr);// Output : 1,3,2,5,1,3,2,5
您的函数返回修改后的数组。 您调用了函数myArr(arr),但没有存储函数返回的结果。 应该像
function myArr(arr){
arr = arr+arr;
return arr;
}
var arr = new Array(1,3,2,5);
arr=myArr(arr);
javascript中没有pass-by-reference
。
在函数myArr
,arr具有嵌套作用域,因此它从未从全局作用域中获取arr
值。
function myArr(arr){ arr = arr+arr; // creates new arr at a different location return arr; } var arr = new Array(1,3,2,5); arr = myArr(arr); document.write(arr);
function myArr(arr){ console.log(typeof(arr)); // pass as a Object arr = arr+arr; // + operator do concatination string console.log(typeof(arr)); // now converted in String return arr; } var arr = new Array(1,3,2,5); myArr(arr); document.write("Output 1="+arr+"<br/>");// Output : 1,3,2,5 arr = arr+arr; // + operator do concatination string // 1,3,2,5 + 1,3,2,5 ==> type String( 1,3,2,51,3,2,5 ) document.write("Output 2="+arr);// Output : 1,3,2,51,3,2,5
以下代码与您提供的代码相同,但更易于理解:
function myArr(array){
array = array + array;
return array;
}
var arr = new Array(1,3,2,5);
myArr(arr);
document.write(arr); // Output : 1,3,2,5
arr = arr + arr;
document.write(arr); // Output : 1,3,2,51,2,5
当心!!! arr
是全局变量,而array
是部分变量。
如果将myArr
array
myArr
为arr
,那就没关系。
Ppartial变量仅在函数运行(闭包除外)时存在。
注释中有解释:
var arr = new Array(1,3,2,5);//arr=[1,3,2,5];
myArr(arr);
function myArr(array){//array=[1,3,2,5],array===arr;
array = array + array;//array=1,3,2,51,3,2,5;arr didn't change!!!
return array;//return 1,3,2,51,3,2,5;arr still didn't change!!!
}
document.write(arr);//arr=[1,3,2,5],so you see 1,3,2,5
arr = arr + arr;//arr=1,3,2,51,3,2,5
document.write(arr);//so you see 1,3,2,51,3,2,51,3,2,5 because it didn't erase the last content.In this case,document write 1,3,2,51,3,2,5 after 1,3,2,5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.