JS函数传递参数问题
2018-03-03 13:46
429 查看
JS函数传递参数问题
js中所有函数的参数都是按值传递的, 也就是说把函数外部的值复制给函数内部的参数, 就如同把一个变量赋值给另一个变量一样.基本类型值传递如同基本类型变量复制一样
引用类型则同引用类型变量的复制一样
基本类型值传递
定义一个处理函数, 传递给函数一个数值类型的值, 只会修改韩顺局部变量的值. 而不会修改外部变量function handleNum(num) { num++; console.log('FNnum:'+num); // 11 } var num = 10; handleNum(num); console.log('num:'+num); // 10
引用类型值传递
对象传递的是地址, 函数内外的变量会根据引用访问同一个对象, 因为堆中对应的地址只有一个.function handleObj(obj) { obj.name = 'jack'; console.log('FNobj:'+JSON.stringify(obj.name)); // jack } var parson = new Object(); handleObj(parson); console.log('parson:'+JSON.stringify(parson.name)); // jack
看到这个例子后, 很多人会认为, 在局部作用域修改的对象会在全局作用域中反映出来, 就说明引用类型是按引用传递的, 再看接下来一个例子
function handleObj(obj) { obj.name = 'jack'; // ------------------------- obj = new Object(); obj.name = 'ruth' // ------------------------- console.log('FNobj:' + JSON.stringify(obj.name)); // ruth } var person = new Object(); handleObj(person); console.log('person:' + JSON.stringify(person.name)); // jack
这个例子与上面的例子唯一的不同就是添加了两行代码, 一行是为obj重新定义了一个新的对象, 另一行是为这个新对象重新设置了name的属性为’ruth’.
如果引用类型是按照引用传递的话, 全局变量的person的name属性也会修改为’ruth’才对, 但是person的name属性值依然是’jack’;
实际上, 当函数内部重写obj的时候, 这个变量引用就是一个局部对象了, 再函数执行完毕后会立即销毁
相关文章推荐
- js传递参数给函数 参数的改变问题
- js 函数传递参数类型问题(基本类型和引用类型)
- 关于js函数的参数传递问题
- js中的类型和函数参数传递类型问题
- 关于a标签中js函数function(va1,va2)方法传递中文参数报错不执行的问题解答
- js函数参数传递,引号的问题,第二次犯错,记下来,以后不能犯了!
- JS循环中使用bind函数的参数传递问题
- EXT传递参数的问题 js函数的参数传递(arguments)
- 在动态THML语句中调用JS函数传递带空格参数的问题
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- 从内存分配看函数参数传递问题
- 解决JS在url中传递参数时参数包含中文乱码的问题
- js传递给NPAPI插件的字符串参数在Firefox下正常,在chrome下面会有乱码现象的问题解决
- gridview的行号作为js函数参数的传递方法
- JavaScript中函数作为参数进行传递时的括号问题
- 动态为js中的function传递参数问题
- c++之指针作为函数参数传递的问题
- C#调用C++写的dll 函数传递参数问题,请有经验的人详细描述
- js 函数参数值问题