- 面试题1
// 问题:请问以下代码的输出结果
var a = 1
function fn() {
console.log(a)
}
function fn2(f) {
var a = 2
f()
}
fn2(fn)
- 面试题1答案及解析
// 问题:请问以下代码的输出结果
var a = 1
function fn() {
console.log(a)
}
function fn2(f) {
var a = 2
f()
}
fn2(fn)
// 答案:1
// 这题容易被迷惑到,把函数名称作为实参传入fn2并执行
// 然后在fn2内部以形参的方式去执行函数,或许会以为是在fn2内部执行了fn的函数体,结果就以为是2了
// 没那么复杂,就是实参形参名字换了下,fn2内部调用执行fn函数,最终输出结果就是1
- 面试题2
// 问题:请问以下代码的输出结果
var fn = function() {
console.log(fn)
}
fn()
var obj = {
fn2: function(){
console.log(fn2)
}
}
obj.fn2()
- 面试题2答案及解析
// 问题:请问以下代码的输出结果
var fn = function() {
console.log(fn)
}
fn()
// 答案:输出结果是fn的函数体,这个比较简单
// console.log(fn) 先在当前所在作用域找fn,没找到,跑外面继续找,在全局作用域找到函数fn,然后输出
var obj = {
fn2: function(){
console.log(fn2)
}
}
obj.fn2()
// 答案:输出结果 报错
// obj对象里的方法fn2,要输出fn2,开始找这个fn2,自己所在的作用域没找到,跑外面继续找
// 跑到全局作用域没找到,输出结果当然报错
// 为什么直接输出fn2却找不到obj里那个fn2呢,因为fn2是属于obj的一个属性/方法,要访问到它就得obj.fn2
// 要输出fn2函数体的话得这么写 console.log(this.fn2)
- Recorded by Scorpio_sky@2020-10-19