function f(arg){
 var n =function(){
   return arg;
 }
arg++; 
return n;}var m= f(123);
l=m();
document.write(l)();//124为什么上面的值不是 123 呢?下面的值是 124 ,我能理解。arg++ 是先取值后加 1 ;++arg 是先加 1 后取值。function f(arg){
 var n =function(){
   return arg;
 }
++arg; 
return n;}var m= f(123);
l=m();
document.write(l)();//124

解决方案 »

  1.   

    arg++ 是先取值后加 1 ;++arg 是先加 1 后取值。
    以上是在判断时候
    例如
    for(i=1;i<=10;i++)运行10次
    和for(i=1;i<=10;++i)
    运行9次
      

  2.   

    ++arg; 
    return n;
    本身不是一步操作
      

  3.   

    闭包问题
    function f(arg) { 
    var x = arg;
    var n = function(){ 
      return x; 
    };
    arg++; 
    return n; 
    } var m = f(123); 
    l = m(); 
    alert(l);//124 
      

  4.   

    兄弟试了,这次结果 是 123.有意思啊,再对比下 :function f(arg){ 
    var n =function(){ 
      return arg; 

    arg++; 
    return n; } var m= f(123); 
    l=m(); 
    document.write(l)();//124 
      

  5.   

    arg++; //123+1=124 可是这里并没有先取值的相关操作。只有加1操作。
    return n;
    这样测试一下楼主就明白了。
    arg++; 
    alert(arg);
    return n; 
      

  6.   

    alert(arg++);//这里才是楼主所说的arg++ 是先取值后加 1 。
    alert(arg);
    return n; 
    有个小疑问:
    楼主运行时
    document.write(l)();这里的括号没有问题吗?
      

  7.   

    document.write(l)() 多出的这个(),在运行时一点问题也不出,正常!!怪了
      

  8.   

    arg++ 和++arg只有在表达式运算中,才会有先后的问题出现。
    如果独立成句,效果是一样的。楼主概念不清!
      

  9.   

    function f(arg) { 
        var x = arg;// arg 的值 123 复制到 变量 x 中
        var n = function(){ 
          return x; 
        };
        arg++; //arg 的 值 加 1 后,并不影响原来的 x 的值
        return n; 

    var m = f(123); 
    l = m(); 
    alert(l);//123 非124  
    -----------------------
    function f(arg){ 
    var n =function(){ 
      return arg; 

    arg++; // arg 值加 1 ,引起 n 的值的变化
    return n; } var m= f(123); 
    l=m(); 
    document.write(l)();//124 变量的基本类型和引用类型之间的差别,在第一段代码中得到了体现。
      

  10.   

    这个不是闭包问题麽,和arg++和++arg关系不大吧.闭包取得就是父函数的变量的最终值。无论++arg还是arg++,最终父函数的arg值都是arg+1
      

  11.   

    谢谢楼上的提醒。不过,具体问题具体分析,我们讨论的是:为什么两个相近的函数返回的值不一样?我的理解对吗?请细看:
    function f(arg) { 
        var x = arg;// arg 的值 123 复制到 变量 x 中 
        var n = function(){ 
          return x; 
        }; 
        arg++; //arg 的 值 加 1 后,并不影响原来的 x 的值 
        return n; 

    var m = f(123); 
    l = m(); 
    alert(l);//123 非124  
    ----------------------- 
    function f(arg){ 
    var n =function(){ 
      return arg; 

    arg++; // arg 值加 1 ,引起 n 的值的变化 
    return n; } var m= f(123); 
    l=m(); 
    document.write(l)();//124 
      

  12.   

    第一个函数,n返回的是x,其父函数的x的最终值是123
    第二个函数,n返回的是arg,其父函数的arg的最终值是124
    还是去理解一下闭包吧...
      

  13.   

    return n; 执行的是 return arg;而不是return arg++;