var a = {x:1}
var b = a
a = {x : 2}
解答:1
詳解:
- 建立1物件
- 建立{x:1}物件,x屬性指向1物件
- 建立a變數,{x:1}物件位置存到a
- 建立b變數,{x:1}物件位置存到b
- 建立2物件
- 建立{x:2}物件,x屬性指向2物件
- 把{x:2}物件的記憶體位置存到a
因為在以上過程中,b指向的依然是{x:1},因此b.x=1
var a;
a = 1;
a = "a";
a = "a" + a;
-
曾經在記憶體中建立過幾個變數?
- 解答:1
- 詳解:建立了一個變數a
-
曾經在記憶體中出現過幾個型別?
- 詳解:undefined、number、string
-
曾經在記憶體中出現過多少物件?
- 解答:5
- 詳解:程式碼運行如下
- 宣告a變數,並把undefined物件位置指向變數a
- 建立1物件,並把1物件位置指向變數a
- 建立"a"物件,並把"a"物件位置指向變數a
- "a" + a過程中把1轉換成"1",建立一個"1"物件(不確定)
- 建立"a1"物件,並把"a1"物件位置指向變數a
var a = 3
解答:
- 建立一個3的物件
- 建立一個a的變數
- 把3物件的記憶體位置放到變數a當中
var a = {x:1}
var b = a
a.x = a = {x:2}
a.x = a = {x:2}
{x:2} 的位置會同時被複製到a.x 跟 a
解答: b.x = {x:2} ; a.x = 2
var a = {x:1}
a.x = a
解答:a.a.a.a.a.a.a.a.a.............(循環參考) 詳解:參考自己是允許的!
const a = {}
a.name = 'will'
解答:可以,因為即使物件增加name的屬性,但a的記憶體都是一樣的。
var a = 1
typeof(a) // number
a.name = "will"
console.log(a.name) // 答案是 ??
解答: undefined
詳解:因為a指向物件1,而物件1不能擴增屬性,因此a.name是失敗的。
var a = 1
Number.prototype.name = 2
a.name = 3
console.log(a.name)
解答:2
詳解:因為a.name只能是繼承來的,而不能是自己設定的。!
請依據以下範本撰寫一個 MyFunc 函式:
function MyFunc() {
// YOUR CODE HERE
}
撰寫完成後,必須可以正常執行以下程式碼:
var o = MyFunc();
console.log(o.Key1); // 回傳 1
console.log(o.Key2); // 回傳 2
解答:
function MyFunc() {
return {
Key1:1,
Key2:2,
}
}
請依據以下範本撰寫一個 MyFunc 函式:
function MyFunc() {
// YOUR CODE HERE
}
撰寫完成後,必須可以正常執行以下程式碼:
var o = MyFunc();
console.log(o.GetA()); // 回傳值為 1
console.log(o.GetB()); // 回傳值為 2
解答:
請依據以下範本撰寫一個 MyFunc 函式:
function MyFunc() {
return {
GetA:function(){ return 1},
GetB:function(){ return 2 }
}
}
function test(a,b){
c = a+ b
return c
}
var d = test(1,2)
解答:c沒有宣告成區域變數,因此會汙染根物件 詳解:console.log(global.c) 會看到 c = 3,如果希望d也不要污染到根物件,可以用IIFE包裹住。
var a = [1,2,3]
var b = [4,5,6]
解答:var c = [a...,b...]
f(1,2,3,4,5,6)
解答:
function fc(a,b,...args){
return a,b,args
}
var arr = [1,2,3]
var a = arr[0]
var b = arr[1]
var c = arr[2]
解答:
var arr = [1,2,3]
var [a,b,c] = [1,2,3]
// var a,b,c = [a,b,c] = [1,2,3]