// 第一题
window.name = 'NB'
function A() {
this.name = 123
}
A.prototype.getA = function () {
console.log(this)
return this.name + 1
}
let a = new A()
let funA = a.getA
funA()
// Window
// NB1
// 第二题
var length = 10
function fn(){
return this.length + 1
}
var obj = {
length: 5,
test1: function(){
return fn()
}
}
obj.test2 = fn
console.log( obj.test1() ) // 11
console.log( fn() === obj.test2()) // false ( 11 和 6)
console.log( obj.test1() === obj.test2() ) // false (11 和 6)
console.log( obj.test1() === fn() ) // true
// 第三题
var o = {
a: 10,
b: {
fn: function () {
console.log(this.a)
console.log(this)
}
}
}
o.b.fn()
// undefined
// { fn: [Function: fn] }
// 第四题
// 对象的 [key] 中的 key 是个字符串
var a = {}
var b = {
key: 'a'
}
var c = {
key: 'c'
}
a[b] = '123' // { '[object Object]': '456' }
a[c] = '456'
console.log(a[b])
// 第五题
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() // 2
getName() // 4
Foo().getName() // 1
getName() // 1
new Foo().getName() //3
new Foo.getName() // 2
// 第六题 (预解析、作用域,在作用域内无调用者,默认就是指向 window)
var n = 123
function f1() {
console.log(n)
}
function f2() {
var n = 456
f1()
}
f2() // 123
console.log(n) // 123
// 第七题 作用域、变量提升、参数
function fun() {
console.log(n)
var n = 456
console.log(n)
}
var n = 123
fun()
// undefined
// 456
// 第八题
for (var i = 1; i <= 3; i++) {
setTimeout(() => {
console.log(i)
}, 1000)
}
// 第九题
(() => {
var a = b = 3 // b = 3, var a = b
})()
// console.log(a) // 报错
console.log(b) // 3
// 第十题
var a = 10
function test() {
a = 100
console.log(a)
console.log(this.a)
var a;
console.log(a)
}
test()
// 100
// 10
// 100
// 第十一题
var b = 'bod'
console.log(b) // bod
function fighting() {
console.log(a) // undefined
console.log(c) // undefined
if (a === 'apple') {
a = 'Alice'
} else {
a = 'Ada'
}
console.log(a) // Ada
var a = 'Andy'
middle()
function middle() {
console.log(c++) // NaN
var c = 100
console.log(++c) // 101
small()
function small() {
console.log(a) // Andy
}
}
var c = a = 88
function bottom() {
console.log(this.b) // bod
b = 'baby'
console.log(b) // baby
}
bottom()
}
fighting()
console.log(b) // baby
// 十二题
var a = 2
var obj = {
a: 4,
fn1: (function () {
this.a *= 2
var a = 3
return function () {
this.a *= 2
a *= 3
console.log(a) // 返回的是一个函数。不会执行 console.log()
}
})
}
var fn1 = obj.fn1
console.log(a) // 2
fn1()
obj.fn1()
console.log(a) // 4
console.log(obj.a) //8
// 第十三题
var a = 2
var obj = {
a: 4,
fn1: (function () {
this.a *= 2
var a = 3
return function () {
this.a *= 2
a *= 3
console.log(a) // 返回的是一个函数。不会执行 console.log()
}
})()
}
var fn1 = obj.fn1
console.log(a) // 4
fn1() // 9
obj.fn1() // 27
console.log(a) // 8
console.log(obj.a) // 8
// 第十五题 去掉数组中非数字字符,并给每个数字 + 1
var arr = [1, 2, 3, 'a', 'b', 'c']
for (let len = arr.length - 1; len >= 0; len--) {
if (typeof arr[len] === 'number') {
arr[len] = arr[len] + 1
} else {
arr.splice(len, 1)
}
}
console.log(arr)
// // 第十六题,在两个排好序的数组中,高效率的找出相同元素,放入新数组
var arr1 = [1, 3, 7, 9, 12, 37, 45]
var arr2 = [2, 4, 9, 13, 45, 88, 92]
var arr = []
var i = 0
var j = 0
while (arr1[i]) {
if (arr1[i] > arr2[j]) {
j++
} else if (arr1[i] < arr2[j]) {
i++
} else {
arr.push(arr1[i])
i++
j++
}
}
console.log(arr)
// // 第十七题 找出一个已排序的数值中,两个元素相加和为 19 的元素组合,考虑程序的执行效率
var arr = [1, 2, 4, 6, 11, 12, 15, 17]
var i = 0
var len = arr.length - 1
var array = []
while (len > i) {
if (arr[i] + arr[len] > 19) {
len--
} else if (arr[i] + arr[len] < 19) {
i++
} else {
array.push(arr[i] + ',' + arr[len])
i++
len--
}
}
console.log(array)
前端笔试整理
最新推荐文章于 2024-04-18 18:10:27 发布