var foo = 1;
function bar() {
if (!foo) {
var foo = 10; //如果这里不加var就是1了,加了var后在预编译时foo会被当做局部变量进行索引,可能有同学基
础和我一样不是太好的,在想我外部定义了一个变理,在内部使用都是好好的啊,那你一定要注意了,这里多了个var
}
alert(foo);
}
bar();
var a = 1;
function b() {
a = 10;
return;
function a() {} //同理a在这里被重新索引
}
b();
alert(a);
下面引用某位同学的回答,个人觉得讲的很清楚了:
预编译和执行期的问题。javascript会分块的进行预编译,预编译期会处理所以使用var声明的变量以及使用function的函数会被处理,但var声明的变量只进行索引,而不处理赋值,赋值在执行期处理,而function的函数会处理函数体。
所以第一个例子:预编译期间建立索引foo和处理bar函数体,但foo未赋值,所以foo为undefined。然后执行期给foo赋值1,执行bar()时,先预编译函数体内的内容,建立局部变量索引foo,但未赋值,所以foo=undefined,此时执行期bar(),由上往下执行,结果自然为10.
而第二个例子类似,因为执行期到b()时,会预编译b里面的内容,此时function a(){}相当于(类似)var a,即也建立局部变量的索引a,所以执行期给局部变量的a赋值10,并不影响全局的a
分享到:
相关推荐
- 预处理器Sass、LESS:用于编译复杂的CSS代码,提供变量、嵌套、混合等高级功能。 - display和position属性的区别及其用法。 - BFC(块级格式化上下文):用来避免浮动元素对其他元素的布局影响。 - 盒模型的...
JavaScript的运行机制主要涉及到代码块、函数声明与赋值、预编译期和执行期等核心概念。首先,我们从代码块开始。 1. **代码块**:在JavaScript中,代码块通常指的是由`<script>`标签包裹的代码段。每个`<script>`...
这就引出了JavaScript的解析过程的两个阶段:预编译期和执行期。在预编译期,JavaScript引擎会对当前作用域中的所有变量声明和函数声明进行处理。这一阶段,函数声明会被提升到作用域的顶部,而变量声明则会被提升但...
这种模式下,JavaScript(简称JS)与原生端(Android和iOS)之间的交互成为了一个重要的课题。 #### 一、JS与原生端交互基础知识 **1.1 JS基础** - **基本概念**:JavaScript是一种轻量级的解释性或即时编译的...
但是,JavaScript代码也面临着恶意攻击和反编译的风险,代码混淆技术可以很好地解决这个问题。本文提出基于强度导向的JavaScript代码协同混淆方法,可以protect JavaScript代码,防止恶意攻击和反编译。 代码混淆...
TypeScript支持所有的JavaScript语法,兼容性好,且可以在编译期去掉类型和特有语法,生成纯粹的JavaScript代码。 TypeScript的特点: * 是JavaScript的一个超集 * 扩展了JavaScript的语法 * 向JS中引入了类型的...
JS的解析过程分为两个阶段:预编译期(预处理)和执行期。在预编译期,声明的变量和声明式函数被提取并处理。而在执行期,代码按顺序逐行执行。对于赋值式函数,只有在执行到函数表达式所在的行时,函数才会被创建。...
**标题解析:** "babelpluginpreval在构建期预先评估代码" 指的是一个名为 `babel-plugin-preval` 的JavaScript开发工具,它在项目构建过程中执行代码的静态评估。 **描述解读:** "babel-plugin-preval 在构建期...
它不是程序设计语言,不进行编译或执行,因此A、B、C错误。HTML文档由各种元素和标签构成,它们定义了网页的各个部分,如标题、段落、图像等。 动态网页制作技术包括PHP、JSP和ASP.NET,它们允许服务器端处理数据并...
在这个过程中,原始的源文件可能通过各种方式产生新的衍生文件,如CSS预处理器(如Sass或Less)生成的CSS文件,或者JavaScript模块打包器(如webpack或Rollup)合并后的JS文件。这些衍生文件对于最终应用的运行是必...
6. 编译器插件支持:1.9.22版编译器增强了对插件的支持,开发者可以更方便地创建和使用自定义的编译期逻辑,实现代码的自动生成或特定的代码优化。 三、Kotlin的生态系统 Kotlin不仅有强大的编译器,还有丰富的...
10. **枚举与注解**:了解枚举类型和其在Java中的使用,学习注解的概念及其在编译期和运行期的作用。 11. **Java EE**:对于进阶学习者,可能还会涉及Java服务器端编程,如Servlet、JSP、JNDI、EJB、JMS等,这些都...
1. **VBScript基本概念**:VBScript是Microsoft开发的一种脚本语言,基于Visual Basic,它不需预编译,可以在运行时动态解释执行。主要应用领域包括ActiveX Data Objects (ADO) 数据访问,Internet Explorer浏览器中...
“win-x64”表明这个版本的Node.js是专门为64位Windows系统编译的,它可以充分利用64位系统的内存资源,处理大型数据和复杂任务时表现出更好的性能。 4. **安装与使用**: 解压“node-v16.15.0-win-x64.zip”后,...
4. PHP与数据库交互:介绍如何使用PDO或MySQLi扩展连接和操作数据库,执行SQL查询,处理结果集,以及事务处理和预编译语句,确保数据安全。 5. PHP框架应用:可能涉及了诸如Laravel、Symfony、Yii等流行的PHP框架,...
- **浏览器兼容性问题**: 不同版本的浏览器对 JavaScript 的支持程度有所不同。例如,早期版本中可用的一些功能,在后续版本中可能会发生变化或者不再支持。此外,某些功能(如 `Date` 对象)在不同操作系统(如 Mac...
首先,需要明确的是,在JavaScript中,this关键字的指向不是在编译期确定的,而是在运行期确定的。这与大多数主流的面向对象语言(比如Java和C#)不同,在那些语言中this关键字在编译期就已绑定到当前对象上。由于...
- **面向切面编程(AOP)**:通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 2. **SpringMVC的工作流程**: - 用户发送请求至前端控制器DispatcherServlet; - DispatcherServlet通过...