`

javascript--活动对象作用域解析

 
阅读更多

 

var myname="xiaofei";
function test(){
  alert(myname);
  var myname="xiaonou";
   alert(myname);
}
test();
//执行弹出的第一次是undefined,第二次是xiaonou
脚本函数在执行test之前必须执行创建活动对象这一步,而在创建活动对象的时候
其构造是{name:undefined,myname:xiaonou};所以执行的时候自然就是上面的这个结果啦。
   javascript权威指南中有句话和好的解释啦这个现象---函数总是在定义它的作用域执行的,而不是在执行它的作用域里运行。

 

var obj = {  
   i : "test",  
   m : function(){  
    alert(this.i);//指向obj对象 ,值test  
        function B(){  
            var i = 1;  
           alert(this.i);//指向window对象,值undefined  
         }  
         
         B();//B并不是window的方法,this为什么也指向window??????  
     }  

}
obj.m();
弹出来的依次是test和undefined;
为什么呢?
我们知道函数是有4种调用模式
1:函数调用模式:也是最简单的模式	比如说:functioninvoke()--对于普通的函数调用,
   函数的返回值成为调用表达式的值;
2:方法调用模式:函数依附于某个对象,函数中的this默认指向所属对象
3:构造调用模式:函数作为构造器来使用,new 关键字
4:apply/call调用模式:可以动态改变函数中this的指向

函数内部的this默认指向全局对象window除非手工指定this.

所以经过上面的分析我们可以看到B()这个函数,没有依附于某个对象,所以他的this是指向window的。

B();我们如果改成
this.B();会出现
TypeError: Object #<Object> has no method 'B'

 

分享到:
评论

相关推荐

    org.mozilla.javascript-1.7.2.jar.zip

    2. 兼容性:Rhino对ECMAScript 3的全面支持保证了与主流浏览器的兼容性,同时,1.7.2版本还引入了如函数表达式、块级作用域等ES4特性,提供了更丰富的编程语法。 3. Java集成:Rhino可以直接调用Java类库,反之亦然...

    深入理解JavaScript作用域和作用域链

    作用域链是JavaScript中另一个核心概念,它是由函数创建时的作用域决定的,包含了函数被创建时所有可访问的数据对象。这个链由内部属性[[Scope]]定义,它包含了函数定义时所在作用域的对象集合。当函数执行时,会...

    第四章示例代码__对象的作用域

    本章示例代码将深入探讨对象作用域的概念,帮助开发者更好地理解和运用这一核心原则。 对象的作用域决定了一个对象在何处可以被访问,以及它何时被创建和销毁。在大多数编程语言中,对象的作用域主要有以下几种类型...

    详解JavaScript的AngularJS框架中的作用域与数据绑定

    本文将详细解析AngularJS中的作用域与数据绑定机制,包括作用域的创建、作用域的继承以及数据绑定的方式。 作用域(Scope)是AngularJS中的核心概念,它类似于其他编程语言中的作用域,但与页面的DOM结构紧密相关。...

    深入理解变量作用域

    作用域链是一个对象列表,用于存储变量和函数声明。 - 当JavaScript引擎需要查找变量时,它会从当前作用域开始,沿着作用域链向上查找,直到找到相应的变量为止。 - 如果在当前作用域找不到变量,则继续在上一层...

    JavaScript — 原型链与作用域链1

    2. **变量活性**:在作用域内声明的变量会自动成为该作用域的活动对象的一部分。这意味着这些变量在作用域内部是可以被访问的。 3. **解析时机**:作用域内的变量和函数只有在作用域执行期间才会被解析和求值。这...

    JavaScript - JavaScript Tutorial

    - **JS Variables**:变量的定义与使用,讲解不同类型的变量及作用域的概念。 - **JS Operators**:算术、比较、逻辑等运算符的使用,帮助开发者理解表达式的计算规则。 - **JS Comparisons**:比较操作符的使用,如...

    how-javascript-works.zip

    2. **作用域创建**:在解析过程中,浏览器会创建作用域链,确定变量的可见性和生命周期。 3. **执行上下文**:JavaScript代码在特定的执行上下文中运行,分为全局执行上下文和函数执行上下文。 4. **内存管理**:...

    complete-javascript-course-master.zip

    此外,还将涵盖闭包、作用域、原型链等高级特性,这些是JavaScript中的精髓,也是面试和实际工作中常考的知识点。 函数式编程也是本课程的重要组成部分,学员会接触到高阶函数、柯里化、map、reduce等函数式编程...

    js-高性能JavaScript-JavaScript语言精粹修订版

    - 掌握变量的作用域链以及词法作用域的特点。 4. **错误处理与调试:** - 学会使用try-catch-finally语句处理异常。 - 掌握常用的调试技巧,包括使用console.log()和浏览器开发者工具。 5. **异步编程:** - ...

    预解析&作用域1

    预解析&作用域1 预解析是 JavaScript 中的一个重要概念...预解析和作用域是 JavaScript 中两个非常重要的概念,它们对我们的编程有着重要的影响。如果我们不能正确地理解和使用它们,那么可能会导致程序中的许多问题。

    Javascript-the-Good-Parts-notes, 关于seminal的优秀部分,注释.zip

    - 闭包是指函数可以访问其自身作用域、外部作用域,甚至已经关闭的变量,这是JavaScript中实现模块化和封装的重要机制。 4. **原型与继承**: - JavaScript使用原型链实现对象的继承,每个对象都有一个`__proto__...

    深入理解JavaScript作用域共12页.pdf.zip

    JavaScript作用域是编程中至关重要的概念,它定义了变量、函数和对象的可见性和生命周期。在深入理解JavaScript作用域时,我们需要关注以下几个关键知识点: 1. **全局作用域**:这是程序中默认的作用域,任何在...

    李炎恢JavaScript-pdf文档笔记

    笔记可能详细解析了原型链、闭包、作用域等概念。 3. **DOM操作**:文档对象模型(DOM)是JavaScript操作HTML和XML文档的标准接口。学习者将了解到如何通过JavaScript选择、添加、修改和删除DOM元素,以及事件处理...

    1.16 JavaScript高级-面向对象.pdf

    本章节将深入探讨JavaScript中的内置对象、面向对象编程基础、基本包装类型以及变量、作用域和内存管理。 首先,我们来看内置对象。JavaScript的内置对象包括Global对象、Math对象等。Global对象在ECMAScript中是一...

    深入了解JavaScript,从作用域链开始(1).pdf

    这个活动对象与当前作用域链的顶部连接,形成了作用域链。作用域链允许函数访问其自身作用域内的变量,以及包含它的所有外部作用域的变量,直到全局作用域。 JavaScript引擎在解析代码时,会先进行预解析阶段,将...

    JavaScript作用域与作用域链深入解析

    当代码执行遇到变量时,JavaScript引擎会通过作用域链来进行标识符解析,从作用域链的头部即活动对象开始搜索变量名,并且按照定义函数时的顺序将变量、命名参数、参数集合以及this推入作用域链的前端。 在...

    js代码-017 018--作用域,变量提升,以及优先级,预解析,this的指向

    JavaScript是Web开发中不可或...总的来说,理解JavaScript的作用域、变量提升、表达式优先级、预解析以及`this`的指向,是成为一名熟练的JavaScript开发者的基础。通过学习和实践,你可以编写出更高效、更可靠的代码。

Global site tag (gtag.js) - Google Analytics