文首發(fā)在個(gè)人博客上:http://www.brandhuang.com/article/1587859232291
《JavaScript高級(jí)程序設(shè)計(jì)》書中說(shuō):ECMAScript中所有函數(shù)的參數(shù)都是按值傳遞的。
把函數(shù)外部的值復(fù)制給函數(shù)內(nèi)部的參數(shù),就和把值從一個(gè)變量復(fù)制到另一個(gè)變量一樣。
傳遞的是原始值本身
在函數(shù)中修改傳入的值,不會(huì)影響原來(lái)的數(shù)據(jù)
var value = 1;
function foo(v) {
v = 2;
console.log(v); //2
}
foo(value);
console.log(value) // 1
傳遞的是對(duì)象的引用的副本,看下面兩個(gè)例子,看看有什么不一樣?
// 例子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
解釋:
對(duì)于復(fù)雜的數(shù)據(jù)類型,函數(shù)內(nèi)部的臨時(shí)變量和傳入的參數(shù)指向同一個(gè)內(nèi)存地址,所以有例子一,我們能通過(guò) o.value 找到內(nèi)存中的 o,也就找到了外部的 obj,所以我們修改 o.value 值的時(shí)候,也會(huì)影響 obj 中的 value 值。
對(duì)于例子二,因?yàn)槭侵苯訉?duì)傳入的參數(shù)進(jìn)行了賦值操作,這會(huì)將內(nèi)部參數(shù) o 進(jìn)行重新綁定,指向了一個(gè)新的地址,所以此時(shí)修改函數(shù)內(nèi)部的值不會(huì)對(duì)外部有影響。
https://segmentfault.com/q/1010000003023316
感謝你的閱讀
先就記錄這幾個(gè)知識(shí)點(diǎn)吧,多了一次性也記不住,大概率你也不會(huì)來(lái)看第二遍
面之間互相傳值通常有以下幾種方法:
1、URL (如:index.html?id=123)
2、cookie
3、本地存儲(chǔ) (localStorage、sessionStorage)
sessionStorage與 localStorage很相似,不同之處在于 localStorage 里面存儲(chǔ)的數(shù)據(jù)沒(méi)有過(guò)期時(shí)間設(shè)置,而存儲(chǔ)在 sessionStorage 里面的數(shù)據(jù)在頁(yè)面會(huì)話結(jié)束時(shí)會(huì)被清除。(也就是localStorage長(zhǎng)期保存,sessionStorage 關(guān)閉頁(yè)面后清除)
今天主要給大家介紹一下使用sessionStorage進(jìn)行頁(yè)面之間互相傳值(通信)
思路:從A頁(yè)面跳轉(zhuǎn)到B頁(yè)面,然后B頁(yè)面獲取數(shù)據(jù)再傳到A頁(yè)面
A頁(yè)面
B頁(yè)面
點(diǎn)擊B頁(yè)面按鈕返回A頁(yè)面,A頁(yè)面加載傳回來(lái)的數(shù)據(jù)“我是b頁(yè)面,張三豐”
A頁(yè)面(a.html)
B頁(yè)面(b.html)
值傳值: 將一個(gè)變量的值拷貝一份賦給另一個(gè)變量。
如果這個(gè)變量的值修改的話不會(huì)影響到另外一個(gè)變量, 這兩個(gè)變量之間沒(méi)有任何聯(lián)系。
<script type="text/javascript">
var num1 = 500
var num2 = num1;
num2 = 40;
alert(num1); // 500;
</script>
引用傳址:將一個(gè)變量的地址賦給另一個(gè)變量。
如果這個(gè)變量的值有修改的話那么另外一個(gè)變量將同時(shí)受到影響, 將一個(gè)變量的內(nèi)存地址賦值給另外一個(gè)變量, 這兩個(gè)變量同時(shí)指向同一個(gè)內(nèi)存地址,
這兩個(gè)變量是有聯(lián)系的。
<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中基本數(shù)據(jù)類型的賦值操作都是賦值傳值;復(fù)合數(shù)據(jù)類型的賦值都是引用傳址。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。