大手们,
请问为什么会发生这种事
var i = "123";
alert(i) //123
function x(i){
i = "321";
}
x(i);
alert(i)//321
第一个,把全局变量的123传入函数,然后啥事儿没做。全局变量下 i依旧为123.
第二个,执行函数x(),函数x改变了全局变量i的值,改成了321。
这就是有没有形参的区别,第一个你把形参i改成a,b,c之类的没有任何问题。当然对应的你要把函数体内的i也要改变成a,b,c
在js函数执行过程中,函数体内的所有变量首先要在本作用域内找,你会说第一个作用域内没有i啊,但是实际上形参就起到了申明变量的作用。也就是第一个的函数体等于
function x(i) {
var i=i;
i='321'
}
如果在本作用域找不到该变量,则向父作用域查找。这就是第二个函数的结果。