整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

前端基础 - Javascript函数传值的方式

文首发在个人博客上:http://www.brandhuang.com/article/1587859232291

函数传值

《JavaScript高级程序设计》书中说:ECMAScript中所有函数的参数都是按值传递的。

按值传递

把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

基本数据类型

传递的是原始值本身

在函数中修改传入的值,不会影响原来的数据

var value = 1;
function foo(v) {
    v = 2;
    console.log(v); //2
}
foo(value);
console.log(value) // 1

复杂数据类型

传递的是对象的引用的副本,看下面两个例子,看看有什么不一样?

// 例子1
var obj = {
    value: 1
};
function foo(o) {
    o.value = 2;
    console.log(o.value); //2
}
foo(obj);
console.log(obj.value) // 2
// 例子2
var obj = {
    value: 1
};
function foo(o) {
    o = 2;
    console.log(o); //2
}
foo(obj);
console.log(obj.value) // 1

解释:

对于复杂的数据类型,函数内部的临时变量和传入的参数指向同一个内存地址,所以有例子一,我们能通过 o.value 找到内存中的 o,也就找到了外部的 obj,所以我们修改 o.value 值的时候,也会影响 obj 中的 value 值。

对于例子二,因为是直接对传入的参数进行了赋值操作,这会将内部参数 o 进行重新绑定,指向了一个新的地址,所以此时修改函数内部的值不会对外部有影响。

参考文章

https://segmentfault.com/q/1010000003023316

感谢你的阅读

先就记录这几个知识点吧,多了一次性也记不住,大概率你也不会来看第二遍



面之间互相传值通常有以下几种方法:

1、URL (如:index.html?id=123)

2、cookie

3、本地存储 (localStorage、sessionStorage)

sessionStorage与 localStorage很相似,不同之处在于 localStorage 里面存储的数据没有过期时间设置,而存储在 sessionStorage 里面的数据在页面会话结束时会被清除。(也就是localStorage长期保存,sessionStorage 关闭页面后清除)

今天主要给大家介绍一下使用sessionStorage进行页面之间互相传值(通信)

思路:从A页面跳转到B页面,然后B页面获取数据再传到A页面

A页面

B页面

点击B页面按钮返回A页面,A页面加载传回来的数据“我是b页面,张三丰”


A页面(a.html)

B页面(b.html)

值传值: 将一个变量的值拷贝一份赋给另一个变量。

如果这个变量的值修改的话不会影响到另外一个变量, 这两个变量之间没有任何联系。

<script type="text/javascript">
    var num1 = 500
    var num2 = num1;
    num2 = 40;
    alert(num1); // 500;
</script>


引用传址:将一个变量的地址赋给另一个变量。

如果这个变量的值有修改的话那么另外一个变量将同时受到影响, 将一个变量的内存地址赋值给另外一个变量, 这两个变量同时指向同一个内存地址,

这两个变量是有联系的。

<script type="text/javascript">
    var arr1 = [3, 5, 7, 8, 10, 11];
    var arr2 = arr1;
    arr2[0] = 13;
    alert(arr1); //[13, 5, 7, 8, 10, 11]
</script>

在javascript中基本数据类型的赋值操作都是赋值传值;复合数据类型的赋值都是引用传址。