var i=10; var j=3; function a() { console.log(i);//undefined console.log(j);//3 var i = 2; console.log(i);//2 }; a();
原来JS在执行过程之前,会对【var】和【function】定义做“预解析”。
解析引擎以块为单位级别,执行所有Var变量的创建,并赋予一个初始值undefined。
当a执行时,它的执行环境中有i的声明,所以不会使用作用域链上的全局变量i——这个i是初始化了,但是不用它。当运行第一个console.log(i)时,i么有初始化,故为undefined。
Refer: Jessica's Blog
相关推荐
1. **快手.js**:这可能是一道关于快手App特定功能或技术问题的手写代码实现。例如,可能要求实现一个短视频播放器的控制逻辑,或者是一段处理用户上传图片和视频的代码。也可能涉及到性能优化,如图片懒加载或视频...
- **题目解析**:本题考查JavaScript中获取接近指定数字的整数的方法。 - **选项分析**: - A. `round(7.25)` 不是标准方法。 - B. `rnd(7.25)` 不是JavaScript的标准方法。 - C. `Math.round(7.25)` 是...
预防SQL注入的方法包括使用预编译语句(参数化查询)、输入验证、限制数据库权限、避免显示详细的错误信息以及使用最新的安全库和框架。 【进程与线程的区别】 进程是资源分配的基本单位,拥有独立的内存空间,而...
这是一道编程题,要求使用Java编写程序统计武侠花名的出处。首先,我们需要读取文本文件,文件中包含了花名及其出处。可以使用Java的`Scanner`类来读取文件,然后使用HashMap来存储每个出处对应的花名数量。伪代码...
以下是对一些常见面试题的详细解析: 1. **不使用第三方变量交换a、b的值**: 这是一道常见的编程题,可以使用异或操作来实现: ```csharp a = a ^ b; b = a ^ b; a = a ^ b; ``` 或者使用加减法: ```...
5. **动态内容加载**:通过AJAX技术,可以实现答题卡的动态加载,即加载当前题目的信息,同时预加载下一道题目,提高用户体验。利用`fetch` API或jQuery的`$.ajax()`方法可以实现异步数据请求。 6. **导航控制**:...