1.
var a = 1;
var b = a;
a = 2;
console.log(b); // 1
var c = [1,2,3];
var d = c;
c.shift();
console.log(d); // [2,3]
我們知道基本對象的賦值是拷貝值,所以改變a不影響b,復(fù)雜對象賦值拷貝的是指針,所以改變c影響d
2.
但是現(xiàn)在有一些奇怪的現(xiàn)象
var a = [1,2,3];
var b = a;
a = [1,2,3,4];
console.log(b); // [1,2,3]
在這里改變了a 但是b沒有改變,并不知道這中間發(fā)生了什么,難道又開辟了一個地址a存放[1,2,3,4]?b還是指向之前的a?
3.
var factorial = function() {
return 1
};
var trueFactorial = factorial;
factorial = function () {
return 2;
}
console.log(trueFactorial()); // 1
哎 奇怪了,不是對factorial 重新賦值了嗎?function的賦值不是淺拷貝嗎?
4.
var factorial = function() {
return factorial();
};
var trueFactorial = factorial;
factorial = function () {
return 2;
}
console.log(trueFactorial()); // 2
哎 在這里能正常調(diào)用到第二次賦值的那個函數(shù)
復(fù)合類型(Function、Object 等)的賦值是引用傳遞,他們都指向了同一個內(nèi)存地址,
// a變量現(xiàn)在存了一個數(shù)組的內(nèi)存塊地址在棧內(nèi)。
// a變量本身也需要一個內(nèi)存塊存放數(shù)組的地址
var a = [1, 2, 3, 4];
// a把地址傳給了b,b現(xiàn)在也指向了 [1,2,3,4]。
// a和b沒啥關(guān)系,只是指向同一個堆內(nèi)存塊而已
var b = a;
// a變量被重新賦值,a的內(nèi)存塊中存放的地址發(fā)生變化,不再指向原來的數(shù)組
a = [5,6,7];
// a被重新賦值并不會改變b的指向,因為二者在棧內(nèi)是不同的內(nèi)存塊
console.log(b); // [1,2,3,4]
歡迎拍磚?。?/p>
{
"type": "Program",
"start": 0,
"end": 41,
"body": [
{
"type": "VariableDeclaration",
"start": 0,
"end": 16,
"declarations": [
{
"type": "VariableDeclarator",
"start": 4,
"end": 15,
"id": { "type": "Identifier", "start": 4, "end": 5, "name": "a" },
"init": {
"type": "ArrayExpression",
"start": 8,
"end": 15,
"elements": [
{ "type": "Literal", "start": 9, "end": 10, "value": 1, "raw": "1" },
{ "type": "Literal", "start": 11, "end": 12, "value": 2, "raw": "2" },
{ "type": "Literal", "start": 13, "end": 14, "value": 3, "raw": "3" }
]
}
}
],
"kind": "var"
},
{
"type": "VariableDeclaration",
"start": 17,
"end": 27,
"declarations": [
{
"type": "VariableDeclarator",
"start": 21,
"end": 26,
"id": { "type": "Identifier", "start": 21, "end": 22, "name": "b" },
"init": { "type": "Identifier", "start": 25, "end": 26, "name": "a" }
}
],
"kind": "var"
},
{
"type": "ExpressionStatement",
"start": 28,
"end": 41,
"expression": {
"type": "AssignmentExpression",
"start": 28,
"end": 41,
"operator": "=",
"left": { "type": "Identifier", "start": 28, "end": 29, "name": "a" },
"right": {
"type": "ArrayExpression",
"start": 32,
"end": 41,
"elements": [
{ "type": "Literal", "start": 33, "end": 34, "value": 1, "raw": "1" },
{ "type": "Literal", "start": 35, "end": 36, "value": 2, "raw": "2" },
{ "type": "Literal", "start": 37, "end": 38, "value": 3, "raw": "3" },
{ "type": "Literal", "start": 39, "end": 40, "value": 4, "raw": "4" }
]
}
}
}
],
"sourceType": "script"
}
這個就是你要的程序。請分清賦值語句做了什么。賦值語句會更改Identifier的值。pop語句算是一個成員方法,不會改變Identifer的指向。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。