簡體   English   中英

為什么函數不更改數組?

[英]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 myArrarr ,那就沒關系。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM