var n = 1;  
var m = n;  
function add_to_total(total, x){    total = total + x;  
document.write(total+"</br>");
document.write(x+"</br>")
}add_to_total(n, m);//输出 2 和 1,
document.write(n+"</br>")//输出 1
document.write(m+"</br>")//输出 1
// 后面讲解中,提到 n=1 m=2 ,可上面的程序证明,却不是这样。请达人讲解,谢谢附:js权威指南中的讲解
var n = 1;  // Variable n holds the value 1var m = n;  // Copy by value: variable m holds a distinct value 1// Here's a function we'll use to illustrate passing by value// As we'll see, the function doesn't work the way we'd like it tofunction add_to_total(total, x){    total = total + x;  // This line changes only the internal copy of total}// Now call the function, passing the numbers contained in n and m by value.// The value of n is copied, and that copied value is named total within the// function. The function adds a copy of m to that copy of n. But adding// something to a copy of n doesn't affect the original value of n outside// of the function. So calling this function doesn't accomplish anything.add_to_total(n, m);// Now, we'll look at comparison by value.// In the following line of code, the literal 1 is clearly a distinct numeric// value encoded in the program. We compare it to the value held in variable// n. In comparison by value, the bytes of the two numbers are checked to// see if they are the same.if (n == 1) m = 2;  // n contains the same value as the literal 1; m is now 2

解决方案 »

  1.   


    if (n == 1) m = 2;  // n contains the same value as the literal 1; m is now 2 
      

  2.   

    var n = 1;  
    var m = n;  
    function add_to_total(total, x) {     total = total + x;  
    document.write(total+" </br>"); 
    document.write(x+" </br>") 

    add_to_total(n, m);//输出 2 和 1
    //这如何解释?
      

  3.   

    if (n == 1) m = 2;  // n contains the same value as the literal 1; m is now 2 
    //n 值确实 为 1 ,给 m 重新赋值 2,m is now 2 。原来 m 值 为 1 。
    //原来是这样理解的,以为 m 的值为 2 ,是函数执行后的结果。这样的理解是错误的。