1.函数传参:按值传递
对于数字、字符串等是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量。
对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组)的地址。当函数改变这个地址指向的对象(数组)的内容时(比如赋值),同时也改变了函数外部变量指向的对象(数组)的内容;当函数改变的是变量的地址时(比如赋值),实际就与函数外部的变量失去了联系,变成了完全不同的对象了,不会对函数外部对象造成改变。当函数操作变量时,没有失去联系,仍然操作的是相同的对象
2.函数作用域和声明提前
var a =1; function test () { alert(a); var a =2; alert(a); } test(); //输出 undefine 和 2 //javascript的函数作用域内声明的所有变量在函数体内都是可见的 //函数的局部变量遮盖了同名的全局变量,但只有执行到改局部变量时才会被复制,没执行到时是undefined