JavaScript面试常见问题解析
需积分: 0 197 浏览量
更新于2024-08-03
收藏 5KB MD 举报
"JavaScript面试题.md"
这篇面试题集涵盖了JavaScript中的多个核心概念,包括变量定义、数据类型、运算符优先级以及作用域等。以下是对每个问题的详细解释:
### 1. 延迟加载js
在HTML中,`<script>`标签可以带有`defer`或`async`属性来实现JavaScript的延迟加载。
- `defer`属性用于告诉浏览器脚本应该在文档解析完成后,但在`DOMContentLoaded`事件触发之前执行。这意味着所有带有`defer`的脚本会按照它们在文档中的顺序执行。
- `async`属性则使得脚本可以异步加载,即不阻塞页面渲染,脚本一旦加载完成就会立即执行,执行顺序不能保证。
### 2. 数据类型的判断
- `NaN`(Not-a-Number)不是一个特定的数值,但它的数据类型是`number`。
- `undefined`是JavaScript中的一个预定义值,表示变量未定义或函数返回无值,其类型为`undefined`。
- `null`虽然通常用来表示“无”或“空”,但它在JavaScript中被视为特殊的`object`类型。
### 3. 运算符优先级和类型转换
- `true + 1`的结果是`2`,因为布尔值`true`在加法运算中被转换为`1`。
- `'name' + true`的结果是`"nametrue"`,因为在字符串与任何其他类型相加时,其他类型将被转换为字符串。
- `undefined + 1`的结果是`NaN`,因为`undefined`不能参与数值运算。
### 4. 异步操作与闭包
这个例子展示了异步处理(setTimeout)和作用域的问题。由于`setTimeout`是异步的,它会在`for`循环结束后才执行,导致三个回调函数共享同一个`i`的值,因此都输出`3`。
### 5. 变量提升(Hoisting)
在`test`函数内部,`bar`在函数体内的声明被提升了到函数顶部,因此在第一次`console.log(bar)`时,`bar`尚未被赋值,输出`undefined`。之后的`bar`被重新赋值为`2`,所以第二次`console.log(bar)`输出`2`。
### 6. 函数声明与函数表达式
在这个例子中,尽管函数名为相同,但函数表达式(`var foo = function() {...}`)不会覆盖函数声明(`function foo() {...}`)。因此,调用`foo()`会执行函数声明中的代码,输出`1`。
### 7. 作用域与闭包
在`c`函数中,`a`函数访问了外部作用域的`b`变量,并在其内部重新定义了一个同名变量。由于JavaScript的作用域链,`a`函数内的`console.log(b)`首先查找本地`b`,找不到则向上搜索,因此第一个`console.log(b)`输出外部的`1`,而第二个`console.log(b)`输出内部的`2`。最后,外部的`console.log(b)`仍然输出`1`,因为`a`函数内部的改变不会影响外部作用域的`b`。
这些面试题旨在考察开发者对JavaScript基本特性的理解,包括数据类型、作用域、变量提升、类型转换以及异步处理等方面的知识。熟悉并掌握这些概念对于JavaScript开发至关重要。
2021-10-30 上传
2024-03-20 上传
2021-09-15 上传
2023-02-21 上传
2023-07-27 上传
岁碎难相见
- 粉丝: 34
- 资源: 1
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜