前端笔试整理

// 第一题
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)









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值