拼多多
一、
求以下代码的输出结果
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));
}