JS形参与实参问题

JavaScript019

JS形参与实参问题,第1张

例如:将全局变量作为参数传到函数内部修改之后并不影响变量自己

例如:如果定义两个名字相同的函数,不管参数个数,后面的函数会覆盖前面定义的函数:

上面的 test 函数始终调用第二个 test(obj) 函数。

没有传入的参数会被当为null和undefined处理。

问题 :

<script>

var a="aaa" // ->声明 全局变量 a

function add(e){ // ->声明 函数 add() ,声明传参 局部变量 e

e="bbb" // ->重新赋值给 局部变量 e

return e // ->将形参 局部变量 e 的值返回

}

add(a) // ->调用 函数 add() , 将 全局变量 a 传入

alert(a) // ->弹框输出 全局变量 a(此时 全局变量 a 的值仍然是 'aaa' )

</script>

回答 :

因为 函数 add() 仅仅被声明调用而函数返回值没有被任何变量或对象接收...

所以 函数 add () 的返回值被自动回收...

你可以将 add () 返回值赋值给予 全局变量 a

语法 :

a = add(a) // ->调用 函数 add() , 将 全局变量 a 传入,将 函数 add() 的返回值 'bbb' 赋值给予 全局变量 a

window.alert(a)// ->弹框输出 全局变量 a(此时 全局变量 a 的值是 'bbb' )

5个,这里没有什么疑问的!

从形式上看很看是两个的,因为有二个为一组做为一个对象,有三个为一组做为一个对象,共有两个.所以应该说是两个,而从我的感觉当中这样是不对的,因为在JS中不存在(exp1,exp2)这样的定义方法,他不是{1,2}而是(1,2),而且()的做用除了VB中的索引外,在JS中只是改变了运算符的优先顺序,而这里改变的显然是,运算符的优选顺序,而,运算本身的优选顺序是自左向右,所以这里除了改变顺序达到一个特殊目的,但如果不考虑这个特殊目的,那么,加了括号跟不加是没有区别的.所以这里的参数是五个而不是两个!

当然你完全可以做一个验证:定义一个有五个形参的函数,然后加括号传值,看一下是否成功!