面试题一
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>作用域与作用域链面试题</title>
</head>
<body>
<script>
var x = 10
function fn(){
console.log(x)
}
function show(f){
var x = 20
f()
}
show(fn) // 输出10
</script>
</body>
</html>
作用域示意图:
面试题二
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>作用域与作用域链面试题</title>
</head>
<body>
<script>
var fn = function(){
console.log(fn)
}
fn() // 打印fn的函数
var obj = {
fn2:function(){
console.log(fn2)
// console.log(this.fn2) // 加上this.fn2才行
}
}
obj.fn2() // 报错
</script>
</body>
</html>
作用域图解:
执行fn()函数时,会在自身作用域查找,能够找到fn函数,便输出
执行obj.fn2()时,先在自身作用域中查找,没有找到fn2函数,然后去全局作用域查找,没有找到fn2函数,因此报错,说fn2没有定义,要想能够输出fn2函数内容,要使用this.fn2()才行