本文精选了20多道具有一定迷惑性的js题,主要考察的是类型判断、作用域、this指向、原型、事件循环等知识点,每道题都配有笔者详细傻瓜式的解析,偏向于初学者,大佬请随意。
第1题
let a = 1
function b(a) {
a = 2
console.log(a)
}
b(a)
console.log(a)
点击查看答案
点击查看解析
第2题
function a (b = c, c = 1) {
console.log(b, c)
}
a()
点击查看答案
点击查看解析
第3题
let a = b = 10
;(function(){
let a = b = 20
})()
console.log(a)
console.log(b)
点击查看答案
点击查看解析
第4题
var a = {n:1}
var b = a
a.x = a = {n:2}
console.log(a.x)
console.log(b.x)
点击查看答案
点击查看解析
第5题
var arr = [0, 1, 2]
arr[10] = 10
console.log(arr.filter(function (x) {
return x === undefined
}))
点击查看答案
点击查看解析
第6题
var name = 'World'
;(function () {
if (typeof name === 'undefined') {
var name = "Jack"
console.info('Goodbye ' + name)
} else {
console.info('Hello ' + name)
}
})()
点击查看答案
点击查看解析
第7题
console.log(1 + NaN)
console.log("1" + 3)
console.log(1 + undefined)
console.log(1 + null)
console.log(1 + {})
console.log(1 + [])
console.log([] + {})
点击查看答案
点击查看解析
第8题
var a={},
b={key:'b'},
c={key:'c'}
a[b]=123
a[c]=456
console.log(a[b])
点击查看答案
点击查看解析
第9题
var out = 25
var inner = {
out: 20,
func: function () {
var out = 30
return this.out
}
};
console.log((inner.func, inner.func)())
console.log(inner.func())
console.log((inner.func)())
console.log((inner.func = inner.func)())
点击查看答案
点击查看解析
第10题
let {a,b,c} = { c:3, b:2, a:1 }
console.log(a, b, c)
点击查看答案
点击查看解析
第11题
console.log(Object.assign([1, 2, 3], [4, 5]))
点击查看答案
点击查看解析
第12题
var x=1
switch(x++)
{
case 0: ++x
case 1: ++x
case 2: ++x
}
console.log(x)
点击查看答案
点击查看解析
第13题
console.log(typeof undefined == typeof NULL)
console.log(typeof function () {} == typeof class {})
点击查看答案
点击查看解析
第14题
var count = 0
console.log(typeof count === "number")
console.log(!!typeof count === "number")
点击查看答案
点击查看解析
第15题
"use strict"
a = 1
var a = 2
console.log(window.a)
console.log(a)
点击查看答案
点击查看解析
第16题
var i = 1
function b() {
console.log(i)
}
function a() {
var i = 2
b()
}
a()
点击查看答案
点击查看解析
第17题
var obj = {
name: 'abc',
fn: () => {
console.log(this.name)
}
};
obj.name = 'bcd'
obj.fn()
点击查看答案
点击查看解析
第18题
const obj = {
a: {
a: 1
}
};
const obj1 = {
a: {
b: 1
}
};
console.log(Object.assign(obj, obj1))
点击查看答案
点击查看解析
第19题
console.log(a)
var a = 1
var getNum = function() {
a = 2
}
function getNum() {
a = 3
}
console.log(a)
getNum()
console.log(a)
点击查看答案
点击查看解析
第20题
var scope = 'global scope'
function a(){
function b(){
console.log(scope)
}
return b
var scope = 'local scope'
}
a()()
点击查看答案
点击查看解析
第21题
function fn (){
console.log(this)
}
var arr = [fn]
arr[0]()
点击查看答案
点击查看解析
第22题
var a = 1
function a(){}
console.log(a)
var b
function b(){}
console.log(b)
function b(){}
var b
console.log(b)
点击查看答案
点击查看解析
第23题
function Foo() {
getName = function () { console.log(1) }
return this
}
Foo.getName = function () { console.log(2) }
Foo.prototype.getName = function () { console.log(3) }
var getName = function () { console.log(4) }
function getName() { console.log(5) }
//请写出以下输出结果:
Foo.getName()
getName()
Foo().getName()
getName()
new Foo.getName()
new Foo().getName()
new new Foo().getName()
点击查看答案
点击查看解析
第24题
const person = {
address: {
country:"china",
city:"hangzhou"
},
say: function () {
console.log(`it's ${this.name}, from ${this.address.country}`)
},
setCountry:function (country) {
this.address.country=country
}
}
const p1 = Object.create(person)
const p2 = Object.create(person)
p1.name = "Matthew"
p1.setCountry("American")
p2.name = "Bob"
p2.setCountry("England")
p1.say()
p2.say()
点击查看答案
点击查看解析
第25题
setTimeout(function() {
console.log(1)
}, 0)
new Promise(function(resolve) {
console.log(2)
for( var i=0 ; i<10000 ; i++ ) {
i == 9999 && resolve()
}
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5)
点击查看答案
点击查看解析
第26题
console.log('1');
setTimeout(function() {
console.log('2');
process.nextTick(function() {
console.log('3');
});
new Promise(function(resolve) {
console.log('4');
resolve();
}).then(function() {
console.log('5');
});
});
process.nextTick(function() {
console.log('6');
});
new Promise(function(resolve) {
console.log('7');
resolve();
}).then(function() {
console.log('8');
});
setTimeout(function() {
console.log('9');
process.nextTick(function() {
console.log('10');
})
new Promise(function(resolve) {
console.log('11');
resolve();
}).then(function() {
console.log('12')
});
})