JavaScript面试挑战:闭包与函数类型解析

0 下载量 131 浏览量 更新于2024-08-31 收藏 89KB PDF 举报
"本文提供了最新的JavaScript程序员面试试题,包括闭包相关的题目,并讲解了JavaScript中的函数类型,特别是具名函数和匿名函数的区别。" 在JavaScript面试中,掌握基础概念和高级特性是至关重要的,其中闭包是一个常考知识点。闭包是一种特性,允许函数访问并操作其外部作用域的变量,即使在其外部函数已经执行完毕后。在提供的代码示例中: ```javascript function fun(n, o) { console.log(o); return { fun: function(m) { return fun(m, n); } }; } var a = fun(0); a.fun(1); a.fun(2); a.fun(3); var b = fun(0).fun(1).fun(2).fun(3); var c = fun(0).fun(1); c.fun(2); c.fun(3); ``` 这三个表达式`a`, `b`, `c`的结果分别展示了闭包的作用。由于每次调用`fun`函数时都会创建一个新的作用域,`n`和`o`的值会被保存,所以: - `a`的输出是`undefined, 0, 0, 0`,因为每次调用`a.fun()`都在同一个对象实例上进行,`n`始终是0。 - `b`的输出是`undefined, 0, 1, 2`,随着连续调用,`n`的值依次递增。 - `c`的输出是`undefined, 0, 1, 1`,在第一次调用`c.fun(2)`时,`n`仍然是1,因为`c`引用的是同一个内部函数实例。 了解函数类型也是面试中常见的要求。JavaScript中的函数有两种基本形式:具名函数和匿名函数。具名函数是指函数有自己的名字,可以被其他地方引用。而匿名函数没有名字,通常作为参数传递或立即执行。 例如,具名函数: ```javascript function myFunction() { // ... } ``` 而匿名函数: ```javascript var anonymous = function() { // ... }; // 或者立即执行的匿名函数 (function() { // ... })(); ``` 在某些旧版本的IE浏览器中,无法通过`fn.name`获取具名函数的名称,但可以通过将函数转换为字符串再解析的方式来获取,如上面提到的`getFunctionName`函数所示。 理解这些基本概念和特性对于JavaScript程序员来说至关重要,它们不仅出现在面试中,也是日常开发中不可或缺的部分。掌握闭包、函数类型及其用法能够帮助开发者编写更高效、更灵活的代码。