`
指甲刀X
  • 浏览: 35212 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

对javascript中的Variable Object的理解

阅读更多

      在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系列(12) 变量对象(Variable Object)

    为了正确地管理这些变量和函数,JavaScript使用了一种称为“变量对象(Variable Object)”的内部机制。接下来,我将深入探讨与变量对象相关的知识点。 首先,需要明确变量对象(VO)与执行上下文(Execution ...

    深入理解JavaScript系列

    深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(13):This? Yes, this! 深入理解JavaScript系列(14):作用域链(Scope Chain) 深入理解JavaScript系列(15):函数...

    Javascript.Object.Oriented.Programming.pdf

    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执行环境,作用域理解

    在 JavaScript 中,每个执行环境都有一个 Variable Object,用于存储变量和函数。函数体中可以使用全局变量、函数嵌套定义时情况更复杂点。这些情况下怎样处理?JavaScript 引擎将不同执行位置上的 Variable Object ...

    深入理解JavaScript系列(.chm)

    深入理解JavaScript系列(12):变量对象(Variable Object) 深入理解JavaScript系列(13):This Yes this 深入理解JavaScript系列(14):作用域链 Scope Chain 深入理解JavaScript系列(15):函数...

    JAVASCRIPT-使用面向对象的技术创建高级 Web 应用程序

    与C++或C#等语言中的对象概念不同,JavaScript中的对象更像是一个包含字符串键值对的词典。 **示例代码**: ```javascript var userObject = new Object(); userObject.lastLoginTime = new Date(); alert(user...

    javascript面向对象编程指南 2nd

    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 ...

    javascript与flash之间的交互(例子)

    通过分析这两个项目,你可以深入理解 ExternalInterface API 的工作原理,以及如何在实际项目中应用 JavaScript 和 Flash 的交互。这些示例对于学习历史上的 Web 技术和了解技术演变过程非常有价值。 **总结** ...

    图解javascript结构

    `The-JavaScript-variable.gif`可能介绍了变量的声明(var、let、const)、作用域(全局、局部)以及变量提升(hoisting)的概念,这是理解JavaScript内存管理和代码组织的关键。 通过这些图解,你可以逐步建立起...

    javascript入门教程.docx

    4. **项目实践**:通过参与实际项目或自己编写小型项目来锻炼编程能力,加深对JavaScript的理解和应用。 通过以上内容的学习和实践,你将能够掌握JavaScript的基本知识和编程技能,为进一步深入学习打下坚实的基础...

    深入理解JavaScript系列.chm

    12.变量对象(Variable Object) 13.This? Yes,this! 14.作用域链(Scope Chain) 15.函数(Functions) 16.闭包(Closures) 17.面向对象编程之一般理论 18.面向对象编程之ECMAScript实现 19.求值策略 20.《你真懂...

    JavaScript Variable Performance

    的前端工程师专家,专注于JavaScript的执行机制及其对性能的影响。文档重点讨论了函数执行时的作用域链(Scope Chains)以及标识符解析的过程,并提供了不同浏览器环境下标识符解析的速度测试结果。最后,作者给出了...

    Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript[EPUB版]

    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 知识点总结(思维导图10张)

    JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的脚本语言,主要用来实现客户端的交互性和动态功能。本文将围绕“JavaScript知识点总结(思维导图10张)”进行详细解析,涵盖从基础语法到高级特性,帮助你...

    javascript 中的 delete及delete运算符

    这一点对理解属性是否可以被删除至关重要。 总结一下,`delete`运算符的使用取决于对象属性是否拥有DontDelete内部属性。通过声明创建的变量、函数或内建对象的属性通常会携带DontDelete内部属性,因此它们不能被`...

    javascript 基础 GIF套图

    JavaScript-array数组.gif JavaScript-function-base函数基础.gif Javascript-operational-character运算符.gif ...The-JavaScript-variable变量.gif Window-object对象.gif DOM-operation基本操作.gif

    Mastering.JavaScript.1785281348

    - 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 ...

    JavaScript: Moving to ES2015

    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 ...

Global site tag (gtag.js) - Google Analytics