面试题答案
一键面试- 函数作用域和块级作用域的不同:
- 函数作用域:在JavaScript中,函数作用域意味着在函数内部声明的变量在整个函数内都可以访问。例如:
function func() {
var x = 10;
function innerFunc() {
console.log(x); // 可以访问到外部函数func中的变量x
}
innerFunc();
}
func();
- 块级作用域:块级作用域由
{}
界定,在ES6引入let
和const
之前,JavaScript没有真正的块级作用域。例如使用var
声明的变量在块级作用域内不会被限制:
if (true) {
var y = 20;
}
console.log(y); // 可以访问到变量y,值为20
而使用let
和const
声明的变量具有块级作用域:
if (true) {
let z = 30;
}
console.log(z); // 报错,z is not defined,因为z的作用域限制在if块内
- 分析给定代码中变量的访问情况:
- 在
test
函数中,var a = 1;
声明了一个具有函数作用域的变量a
。在if
块内可以访问到a
,因为if
块在test
函数内部,所以console.log(a);
会输出1
。 let b = 2;
声明了一个具有块级作用域的变量b
,其作用域限制在if
块内。当执行到console.log(b);
时,已经超出了b
的作用域,所以这行代码会报错,提示b is not defined
。
- 在
总结:上述代码执行时,console.log(a);
会正常输出1
,而console.log(b);
会导致错误,因为b
在其块级作用域之外不可访问。