<style type="text/css">
<!--
p
{text-indent:2em}
-->
</style>
关于Javascript局部变量、块级作用域的理解
废话少说,直接上代码和注释。
先简单说一说:HTML文件解析时,JS代码的运行顺序
如果一个文档流中包含多个script代码段(用script标签分隔的js代码或引入的js文件),它们的运行顺序是:
步骤1. 读入第一个代码段(js执行引擎并非一行一行地执行程序,而是一段一段地分析执行的)
步骤2.做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到步骤5
步骤3. 对var变量和function定义做“预解析”(永远不会报错的,因为只解析正确的声明)
步骤4. 执行代码段,有错则报错(比如变量未定义)
步骤5. 如果还有下一个代码段,则读入下一个代码段,重复步骤2
步骤6. 结束
step3中所谓的“预解析”,其实是在step2的语法分析阶段完成,并存储在语法树中。当执行到函数实例时,会将varDelcs和funcDecls从语法树中复制到执行环境的scriptObject上。
局部函数(f)运行时,会提前为其中的变量(i)分配空间而未执行到赋值语句(i=3)之前,显然变量的值是undefined !…………
只要函数(f)中存在同名局部变量(i=3),则外部变量的值在作用域链中被屏蔽。
把Javascript理解为一种设计简陋的语言,反而便于理解。
作为对照,请看下面一段代码:
分享到:
相关推荐
总的来说,理解JavaScript的全局变量和局部变量的规则,有助于编写更安全、更易于维护的代码。正确使用作用域,避免全局变量滥用,可以显著提高代码的可读性和可靠性。在编写JavaScript代码时,应该始终关注变量的...
7. 可见性和安全性:局部变量对外部是不可见的,这意味着它们对于外部代码是安全的,不易受到外部代码的影响。而全局变量由于在全局范围内可见,增加了变量被意外修改的风险。 8. 避免全局变量污染:在现代的...
在 JavaScript 中,函数体内部的局部变量的优先级比同名的全局变量高。这是因为 JavaScript 会优先查找当前作用域中的变量,而不是全局变量。 JavaScript 还没有块级作用域,这意味着在 if 语句、for 循环、while ...
为了提升性能,减少潜在的命名冲突,并且遵循最佳实践,推荐在JavaScript中尽可能使用局部变量来代替全局变量。这一点在众多开发者的共识中已经成为一个基本规则。Nicholas C. Zakas是这一建议的早期倡导者之一,他...
### JavaScript变量详解 ...综上所述,理解JavaScript变量的命名规则、声明方式以及作用域等概念对于编写高质量的JavaScript代码至关重要。遵循这些最佳实践可以帮助开发者写出更加清晰、高效且易于维护的代码。
JavaScript中的变量管理是一个关键概念,理解全局变量与局部变量的区别对于编写高效且无错误的代码至关重要。在这篇文章中,我们将深入探讨这两个概念以及它们在JavaScript中的工作方式。 首先,JavaScript的作用域...
在JavaScript中,变量的作用域分为全局变量和局部变量。全局变量是在任何函数外部定义的变量,而局部变量则是在函数内部定义的变量。在JavaScript中,每个函数都有自己的作用域链。作用域链是一个对象列表,包含了...
在JavaScript编程中,局部变量和全局变量是两种不同的变量存储方式,它们对程序的性能和行为有着重要的影响。局部变量是定义在函数内部的变量,而全局变量则是在函数外部定义的变量,能够被程序中的任何函数访问。...
总的来说,理解JavaScript中的全局变量和局部变量以及它们的作用域规则对于编写可维护和可预测的代码至关重要。避免全局变量的滥用可以减少命名冲突,提高代码的可读性和安全性。同时,正确地使用局部变量可以确保...
Java 中局部内部类可以访问它所在方法中定义的 final 修饰的局部变量的合理解释 在 Java 中,局部内部类可以访问它所在方法中定义的 final 修饰的局部变量,这是一个非常重要的知识点。这是因为 JVM 在编译时会将 ...
在讨论如何使用局部变量来提升JavaScript性能时,我们需要从多个层面来深入理解局部变量对性能影响的机理和实际操作的优化技巧。 首先,从局部变量和全局变量的读写性能差异谈起。在JavaScript中,变量根据作用域的...
在JavaScript编程中,理解和掌握全局变量与局部变量的概念至关重要。全局变量在整个脚本或函数作用域内都可访问,而局部变量只在其所在的函数内部有效。本文将深入解析这两种变量的特性,并通过实例代码来演示它们的...
本文将深入探讨JavaScript中的变量声明,包括全局变量、局部变量、隐式全局变量以及“hoisting”(预解析)现象。 首先,变量根据其声明的位置分为全局变量和局部变量。全局变量在函数外部声明,其作用范围覆盖整个...
一个特殊的规则是,函数内部可以直接访问全局变量,但外部无法直接访问函数内部的局部变量。如果不使用`var`关键字声明函数内部的变量,这个变量实际上会变成全局变量,而不是局部变量。 接下来,我们探讨如何从...
在这个例子中,`fun2` 是 `fun1` 内部定义的一个函数,它可以访问 `fun1` 的局部变量 `str`。当 `fun1` 执行完毕并返回 `fun2` 时,尽管 `fun1` 已经结束执行,但 `fun2` 仍然能够记住并访问到 `str` 变量,这就构成...
本文将深入探讨JavaScript中的全局变量、局部变量、变量提升、词法作用域以及作用域链。 1.1 全局变量与局部变量 全局变量在整个程序中都可访问,即使在函数内部定义,它们也会成为全局变量,除非在函数内部重新...
- **直接访问**:无论在哪一部分代码中,只要不在同名局部变量的作用域内,都可以直接通过变量名访问全局变量。 ```javascript console.log(globalVar); // 输出:"我是全局变量" console.log...