首页 > 关于js变量的问题

关于js变量的问题

今天在写js的时候发现一个问题:

当我在一个函数中直接调用一个全局变量,并对他进行修改的时候,修改的结果在全局生效,代码:
$(function(){
            var change = 0;
            alert(change);//0
            function go (){
                change+=10;
                alert(change);
            }
            alert(change);//0
            go(change);//10
            alert(change);//10
        })
而当我把变量作为参数传递给函数时,实际上在函数外面却没有生效,代码:
$(function(){
            var change = 0;
            alert(change);
            function go (change){
                change+=10;
                alert(change);
            }
            go(change);
            alert(change);
        })

该怎么解释,我是小白。。。


你可以吧传参的参数变动下
比如
var a = 0;
function change(b){
alert(b);
};
change(a);
应该便于理解


javascript的函数传参的形式是值传递引用传递
引用类型的数据是引用传递,其他类型的数据都是值传递。
你这传进去的是个数字,那当然是值传递,传进去的参数和外面的参数不是同一个。


$(function(){
            var change = 0;
            alert(change);
            function go (change){  //这里的change只是参数名,可以随意取一个合法名称 
                change+=10;
                alert(change);
            }
            go(change);   //这个调用了 go() 函数,传入之前定义的 var change = 0  这个变量,上面那个函数接收变量值 0 存在参数中,供 go()函数调用,函数结束,参数就不起作用了
            alert(change); //使用的仍是 之前定义的 var change = 0 这个变量
        })

call~by~shall方式


很简单

$(function(){
            var change = 0;
            alert(change);
            function go (change){
                change+=10;
                /*此时改变的change并不是外层的变量,
                而是go()方法的change参数,
                作用域仅限该函数,
                与外层的change完全是毫不相干的两个东西。*/
                alert(change);
            }
            go(change);
            alert(change);
        })

这是两个不同的change。。。

作用域是不同的

【热门文章】
【热门文章】