# javascript基础测试题(三)
# 1.请写出正确的执行结果
var bar = 2;
var yideng = {
bar: function () {
return this.baz
},
baz: 1
};
(function () {
console.log(typeof arguments[0]());
})(yideng.bar)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
答案: undefined
- 传入实参yideng.bar,arguments0 调用传入的实参,即返回一个this.baz
- 由于是arguments调用的,所以this指向arguments,arguments没有baz属性
- 所以typeof 是undefined
# 2.请写出正确的执行结果
function test() {
console.log('out');
};
(function (){
if (false) {
function test() {
console.log('in');
}
}
test();
})()
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
答案: test is not a function
- 在立即执行函数中,if判断是false,所以永远不会执行,但是在里面声明了 test 函数,所以test声明会在立即执行函数内变量提升,但是由于执行不到,所以函数未声明。
- 所以在执行test()时,test 是 undefined。
# 3.请写出正确的执行结果
var x = [typeof x, typeof y][1];
typeof x;
1
2
2
答案: "string"
- 首先由 x = [typeof x, typeof y][1] 得出 x = typeof y;
- y 未定义,所以typeof y == "undefined" ,所有typeof 的返回值都是字符串;
- typeof x == typeof typeof y == typeof "undefined" == "string";
# 4.请写出正确的执行结果
(function(x) {
delete x;
return x;
})(1);
1
2
3
4
2
3
4
答案: 1
- delete删除的是对象上的属性,不能删除参数
- 所以返回的依然是1
# 5.请写出正确的执行结果
var x = 1;
if (function f() {}) {
x += typeof f;
}
x;
1
2
3
4
5
2
3
4
5
答案: "1undefiend"
- 首先 function f(){} 是个 function 所以在判断条件里是trou,会进入条件分支;
- 但是在条件分支内并未定义 f ,且在外部也没有f ,所以typeof f 是undefiend;
- 所以`最后的x 是 "1undefiend";
# 6.请写出正确的执行结果
function f() {
return f;
}
new f() instanceof f;
1
2
3
4
5
2
3
4
5
答案: false
- em。。。。。。。。。。。。
# 7.请写出正确的执行结果
Object.prototype.a = 'a';
Function.prototype.a = 'a1';
function Person() {};
var yideng = new Person();
console.log(yideng.a);
1
2
3
4
5
2
3
4
5
答案: a
- em.......
# 8.请写出正确的执行结果
var yideng = [0];
if (yideng) {
console.log(yideng == true);
} else {
console.log("yideng");
}
1
2
3
4
5
6
2
3
4
5
6
答案: false
# 9.请写出正确的执行结果
function yideng() {
return {
a: 1
}
};
var result = yideng();
console.log(result.a);
1
2
3
4
5
6
7
2
3
4
5
6
7
答案: 1
# 10.(源于阿里面试题)
const timeout = ms => new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, ms);
});
const ajax1 = () => timeout(2000).then(() => {
console.log('1');
return 1;
});
const ajax2 = () => timeout(1000).then(() => {
console.log('2');
return 2;
});
const ajax3 = () => timeout(2000).then(() => {
console.log('3');
return 3;
});
const mergePromise = (ajaxArray) => {
//1,2,3 done [1,2,3] 此处写代码 请写出es6 es3 2种解法
}
mergePromise([ajax1, ajax2, ajax3]).then(data => {
console.log("done");
console.log(data); // data为[1, 2, 3]
});
// 执行结果为: 1 2 3 done [1, 2, 3]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 11.请写出正确的执行结果
var length = 10;
function fn() {
console.log(this.length);
}
var yideng = {
length: 5,
method: function (fn) {
fn();
arguments[0]();
}
}
yideng.method(fn, 1);
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
- 10
- 2
# 12.请写出正确的执行结果
var num = 1;
function yideng() {
"use strict";
console.log(this.num++);
}
function yideng2() {
console.log(++this.num);
}
(function() {
"use strict";
yideng2();
})()
yideng();
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 2
- Cannot read property 'num' of undefined
# 13.请写出正确的执行结果
function C1(name) {
if (name) {
this.name = name;
}
}
function C2(name) {
this.name = name;
}
function C3(name) {
this.name = name || 'fe';
}
C1.prototype.name = 'yideng';
C2.prototype.name = 'lao';
C3.prototype.name = 'yuan';
console.log(
new C1().name +
new C2().name +
new C3().name
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- yidengundefinedfe
# 14.请写出正确的执行结果
const pro = new Promise((resolve, reject) => {
const innerpro = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
})
console.log(2);
resolve(3);
})
innerpro.then(res => console.log(res));
resolve(4);
console.log('yideng');
})
pro.then(res => console.log(res));
console.log('end');
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- 2
- yideng
- end
- 3
- 4
# 15.请写出正确的执行结果
var A = function() {};
A.prototype = {};
var a = new A();
A.prototype = {};
var b = new A();
console.log(a instanceof A);
console.log(b instanceof A);
1
2
3
4
5
6
7
2
3
4
5
6
7
- false
- true