primekky 2015-08-14 11:59 采纳率: 60%
浏览 1596
已采纳

请教有关JS中变量的问题

举个栗子:
window.onload=function(){
var a=1;
var b=2;
plus(a,b);
function plus(a,b){
a=a+b;
b=0;
//此时在这个函数内还能调用到父函数中的a=1,b=2吗?

}

}

  • 写回答

5条回答 默认 最新

  • tsinggao 2015-08-14 12:30
    关注

    这个问题是两种不同变量在作为参数传递的问题,JS传递变量分为两种一种是基础变量,传递的是变量内容,第二种是引用变量(对象),在函数中传递的指向对象的指针,楼主这个函数传递的是基础变量,所以在子作用域中修改了变量,在父作用域中变量并没有修改,但是你如果将a、b封装在对象中,将对象作为函数参数传递过去,就可以修改父函数的内容了。如下代码所示。

     window.onload=function(){
    var a=1;
    var b=2;
    plus(a,b);
    function plus(a,b){
    a=a+b;// 等同于 var a = a+b;此处的a是子作用域新定义的a,那么子作用域就有两个名为a的基本变量,按js规则,后面定义的基本变量会覆盖前者
    b=0;//同上
    }
    }
    

    修改代码如下:

    window.onload=function(){
        var obj = {};
        obj.a = 1;
        obj.b = 2;
        alert(obj.a);
        alert(obj.b);
    
        plus(obj);
        function plus(obj){
        a = obj.a+obj.b;
        b = 0;
        alert("innerA:"+obj.a);
        alert("innerB:"+obj.b);
    
        }
        alert("outterA:"+obj.a);
        alert("outterB:"+obj.b);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置