拼多多
一、
求以下代碼的輸出結果
function test(a,b,c){
a=a*10;
b.item=5;
c={item:5};
}
var x=10;
var y={item:10};
var z={item:10};
test(x,y,z);
①console.log(x);
②console.log(y.item);
③console.log(z.item);
答案:10 5 10
分析:這道題考查的是js中參數的傳遞問題。
在ECMAScript中,所有函數的參數都是按值傳遞的。
①向參數傳遞基本類型的值時,被傳遞的值會被復制給一個局部變量,局部變量的改變不會影響到函數外部原來變量的值。
②向參數傳遞引用類型的值時,會把這個值在內存中的地址復制給一個局部變量,這個局部變量的變化會反映在函數外部。
③向參數傳遞引用類型的值時,會把這個值在內存中的地址復制給一個局部變量,如果在函數 內部重寫了這個變量時,這個變量引用的就是一個局部對象,指向一段新地址,這個局部對象會在函數執行完畢后立即被銷毀,但是原始的引用不受影響。
二、
求以下代碼的打印結果:
console.log(['123',2,3].map(parseInt));
答案:[123,NaN,NaN]
分析:為什么????????
三、
以下代碼的輸出結果是什么?
console.log(
(function(x){
delete x;
return x;
})(2)
);
答案:2。
分析:
delete的用法
①delete可以刪除對象的屬性
var obj={attr:1};
delete obj.attr;
console.log(obj.attr);//undefined
②delete不能刪除變量
var x=1;
delete x;
console.log(x);
③delete不能刪除函數
function fn(){}
delete fn;
console.log(typeof fn);
四、將兩個有序數組進行歸并排序
function merge(arr1,arr2){
//創建保存結果的數組
var result=[];
//創建兩個指針,分別指向數組中當前較小的數字
var index1=0;
var index2=0;
while(index1<arr1.length&&index2<arr2.length){
if(arr1[index1]<=arr2[index2]){
result.push(arr1[index1]);
index1++;
}else{
result.push(arr2[index2]);
index2++;
}
}
return result.concat(arr1.slice(index1),arr2.slice(index2));
}