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)// true5.输出下面值,为什么?
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})) // 206.输出下面值,为什么?
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()