分享人:吴胜
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
我今天要讲的是js基础传参:值传递、对象传递
在计算机科学里,按值传递(call by value)和按引用传递(call by reference)这个部分统称求值策略(Evaluation Strategy)。它决定函数调用时实参和形参之间值是如何传递的。
函数的形参是被调用时所传实参的副本。
在函数中调用的参数是函数的参数。
如果函数修改参数的值,将不会修改参数的初始值(在函数外定义)。
函数参数的改变不会影响函数外部的变量(局部变量)。
函数的形参接收实参的隐式引用,而不再是副本。
因此我们在函数内部修改对象的属性就会修改其初始的值。
修改对象属性可作用于函数外部(全局变量)。
var obj = {x : 1};
function foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x) // 仍然是1, obj并未被修改为100.;
从上面的代码可以看出,JavaScript中函数参数的传递方式既不是传值,也不是传引用,我们把它成为call-by-sharing(按共享传递)。
JS中的基本类型按值传递,对象类型按共享传递的(call by sharing,也叫按对象传递、按对象共享传递)。最早由Barbara Liskov. 在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。
var obj = {x : 1};
function foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // 仍然是1, obj并未被修改为100.
var obj = {x : 1};
function foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, 被修改了!
函数之间的传参是没有了,不过js页面之间也有对应的传参方法。
一、URL;
二、H5 web storage;
三、Cookie;
四、Form 表单.
URL传参:取值方便,可以跨域;H5 Web storage:使用起来非常简单、方便;Cookie传参:兼容性最好,可以在同源内的任意网页内访问,生命期可以设置。
感谢大家观看
BY : 吴胜