面试题答案
一键面试- 函数表达式:
- 作用域规则:函数表达式创建的函数作用域取决于它被定义的位置,遵循词法作用域规则。函数表达式在其所在的块级作用域或函数作用域内有效。
- 代码示例:
function outerFunction() {
let localVar = 'outer variable';
let funcExpression = function() {
console.log(localVar);
};
funcExpression();
}
outerFunction();
在上述代码中,funcExpression
是一个函数表达式,它可以访问 outerFunction
作用域内的 localVar
变量。
- 命名函数(函数声明):
- 作用域规则:命名函数(函数声明)具有函数提升特性,它的作用域是其所在的整个作用域链,在其定义之前也可以被调用。它不受块级作用域的限制,在全局作用域或函数作用域内都有效。
- 代码示例:
function namedFunction() {
console.log('This is a named function');
}
namedFunction();// 可以在定义之前调用
function outer() {
namedFunction();// 可以在函数内部调用
function namedFunction() {
console.log('Inner named function');
}
}
outer();
在上述代码中,全局的 namedFunction
可以在定义之前调用,并且在 outer
函数内部重新定义了 namedFunction
,它遵循函数作用域规则,优先使用内部定义的 namedFunction
。