在ECMAScipt中,通过变量对象Variable Object (VO)机制来存贮、访问变量variables。VO中包含了:
1. variables (通过var 声明的变量),
2. function declaration (函数声明),
3. function formal parameters (函数行参)。
注:
不包括function expression (函数表达式)。
Variable Object在Global Context中等同于Global Object,在Function Context中称为Activation Object (AO),一般来讲,Variable Object / Activation Object 我们不能直接在外部访问到。
要访问某个变量x,首先在x所在Function Context中的Variable Object中查找,若找不到,则在x所属function的[[scope]]属性中保存的scope chain中,逐级向上查找,直至查找到Global Object,如果仍未找到则返回 x is not defined
。
我们所常见的window对象实际上是Global Object的引用,所以通过var在Global Context中声明的变量x,可以通过x直接访问,也可通过window.x来间接访问,并且通过window.x访问比直接访问要慢
。
var a = "variable";
b = "property";
console.log(window.a); // "variable"
console.log(window.b); // "property"
delete window.a; // false
console.log(window.a); // "variable"
delete window.b; //true
console.log(window.b); //undefined;
在上面的例子中,
虽然都能通过window.a, window.b的形式来访问,看似都是window的属性,但是实质是不同的。
不使用var声明的”变量“,实际不是真正的变量,而是Global Object的属性,可以通过delete 关键字删除,而真正的变量拥有”DontDelete“属性,不能通过delete删除。
但值得注意的是,在firebug中,执行delete window.a; delete window.b;的返回值都是true,这是由于在eval context中,变量不会被添加”DontDelete”属性,firebug正是利用eval来执行我们在console中的代码,而在chrome,opera的console中则返回正确的false,true
参考:http://dmitrysoshnikov.com/ecmascript/chapter-2-variable-object/
分享到:
相关推荐
为了正确地管理这些变量和函数,JavaScript使用了一种称为“变量对象(Variable Object)”的内部机制。接下来,我将深入探讨与变量对象相关的知识点。 首先,需要明确变量对象(VO)与执行上下文(Execution ...
深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(13):This? Yes, this! 深入理解JavaScript系列(14):作用域链(Scope Chain) 深入理解JavaScript系列(15):函数...
Build sophisticated web applications by mastering the art of Object-Oriented Javascript About This Book Learn popular Object-Oriented programming (OOP) principles and design patterns to build robust ...
在 JavaScript 中,每个执行环境都有一个 Variable Object,用于存储变量和函数。函数体中可以使用全局变量、函数嵌套定义时情况更复杂点。这些情况下怎样处理?JavaScript 引擎将不同执行位置上的 Variable Object ...
深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(13):This Yes this 深入理解JavaScript系列(14):作用域链 Scope Chain 深入理解JavaScript系列(15):函数...
与C++或C#等语言中的对象概念不同,JavaScript中的对象更像是一个包含字符串键值对的词典。 **示例代码**: ```javascript var userObject = new Object(); userObject.lastLoginTime = new Date(); alert(user...
javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...
通过分析这两个项目,你可以深入理解 ExternalInterface API 的工作原理,以及如何在实际项目中应用 JavaScript 和 Flash 的交互。这些示例对于学习历史上的 Web 技术和了解技术演变过程非常有价值。 **总结** ...
`The-JavaScript-variable.gif`可能介绍了变量的声明(var、let、const)、作用域(全局、局部)以及变量提升(hoisting)的概念,这是理解JavaScript内存管理和代码组织的关键。 通过这些图解,你可以逐步建立起...
4. **项目实践**:通过参与实际项目或自己编写小型项目来锻炼编程能力,加深对JavaScript的理解和应用。 通过以上内容的学习和实践,你将能够掌握JavaScript的基本知识和编程技能,为进一步深入学习打下坚实的基础...
12.变量对象(Variable Object) 13.This? Yes,this! 14.作用域链(Scope Chain) 15.函数(Functions) 16.闭包(Closures) 17.面向对象编程之一般理论 18.面向对象编程之ECMAScript实现 19.求值策略 20.《你真懂...
的前端工程师专家,专注于JavaScript的执行机制及其对性能的影响。文档重点讨论了函数执行时的作用域链(Scope Chains)以及标识符解析的过程,并提供了不同浏览器环境下标识符解析的速度测试结果。最后,作者给出了...
Precise and practical explanations of JavaScript’s functions and variable scoping semantics Useful JavaScript programming patterns and idioms, such as options objects and method chaining In-depth ...
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的脚本语言,主要用来实现客户端的交互性和动态功能。本文将围绕“JavaScript知识点总结(思维导图10张)”进行详细解析,涵盖从基础语法到高级特性,帮助你...
这一点对理解属性是否可以被删除至关重要。 总结一下,`delete`运算符的使用取决于对象属性是否拥有DontDelete内部属性。通过声明创建的变量、函数或内建对象的属性通常会携带DontDelete内部属性,因此它们不能被`...
JavaScript-array数组.gif JavaScript-function-base函数基础.gif Javascript-operational-character运算符.gif ...The-JavaScript-variable变量.gif Window-object对象.gif DOM-operation基本操作.gif
- Code using the powerful object-oriented feature in JavaScript - Test and debug your code using JavaScript strategies - Master DOM manipulation, cross-browser strategies, and ES6 - Understand the ...
You will gain a concrete understanding of variable scoping, loops, and best practices on using types and data structures, as well as the coding style and recommended code organization patterns in ...