今天在写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。。。
作用域是不同的