2019-03-12面试总结

241 阅读1分钟

1.输出下面值,为什么?

var a = 1
if(!(b in window)) {
    var b = 2
    a+=1
} else {
    a+=2
}
console.log(a) // 3
console.log(b) // undefined

解释:
对于var 来说,涉及到变量提升
var a = 1
var b
if(!(b in window)) { // false
    var b = 2
    a+=1
} else {
    a+=2
}


2.输出下面值,为什么?

var m = 1
function log() {
    var m = 2
    return function() {
        m+=1
    }
}
var _log = log()
_log()
console.log(m) // 1
函数外部访问不到函数内部的值

3.输出下面值,为什么?

for (var i = 0; i<5; i++) {
    (function() {
        setTimeout( function() {
            console.log(i) // 5,5,5,5,5
        })
    })(i)
}

4.输出下面值,为什么?

function fun() {}
console.log(typeof fun) // 'function'
console.log(fun instanceof Function) //true
console.log(fun instanceof Object)// true

5.输出下面值,为什么?

var a = 1
var obj = {
    a: 10,
    fun: function() {
        return this.a
    }
}
console.log(obj.fun()) // 10
console.log(obj.fun.call()) // 1
console.log(obj.fun.call({a: 20})) // 20

6.输出下面值,为什么?

var arr = [1,2,3]
function toarr (arr) {
    arr = []
}
toarr(arr)
console.log(arr) // [1,2,3]

7.输出下面值,为什么?

function Foo() {
     getName = () => {
        console.log(1)
    }
    return this
}
Foo.getName = () => {
    console.log(2)
}
Foo.prototype.getName = () => {
    console.log(3)
}
var getName = () => {
    console.log(4)
}
function getName () {
    console.log(5)
}

Foo.getName() // 2
getName() // 4
Foo().getName() // 1
getName() //1

new Foo.getName()
new Foo().getName() // 3
new new Foo().getName()