这个很有搞头,简单看两个例子,说说我个人的理解吧:
例一.
var aa=11;
Test();
alert(aa);
function Test()
{
var aa=33;
alert(this.aa);
this.aa = 22;
alert(this.aa);
alert(aa);
}
alert(new Test().aa);
这段代码运行结果是:
[11] [22] [33] [22] [undefined] [22] [33] [22]
一点个人理解:
- 这段带码运行在window对象上,浏览器似乎将var定义的变量全部当成window对象的属性,若一个变量未用var定义,却在程序中被赋值,那么浏览器将先为window对象创建该属性,并给该属性赋值;
- 任何函数中的this代表调用该函数的对象,如果没有任何对象调用该函数(直接让函数执行),那么就相当于是window对象调用该函数执行(其中的this就代表window对象);
- 对于new Test()这样的写法其实可以看做新建一个空对象,然后让该空对象调用Test()函数;在悟透javascript一书中李占说:var aObj = new func()就等价于 var aObj = {}; func.call(aObj);
代码第一次调用Test()时,this对应的对象是window,第二次this对应的对象是一个匿名的Object。
例二.
var Foo = {Name:'Foo'};
function OuterFoo()
{
this.Name = 'Outer Name';
function InnerFoo()
{
var Name = 'Inner Name';
alert(Name + ', ' + this.Name);
}
return InnerFoo;
}
(new OuterFoo())(); // 直接调用InnerFoo, 但是为OutFoo创建了调用对象
alert(window.Name); // 由于OutFoo有了调用对象, 故而不会为window对象创建Name属性
OuterFoo()(); // 直接调用InnerFoo, 并且也直接调用了OutFoo
alert(window.Name); // 由于直接调用了OutFoo, 所以也为window对象创建Name属性并赋值
(new OuterFoo()).call(Foo); // 用Foo对象调用InnerFoo, InnerFoo当然也就获得了其Name属性
这段代码运行结果是:
[Inner Name, undefined] [undefined] [Inner Name, Outer Name] [Outer Name] [Inner Name, Foo]
简单分析见注释部分。
总而言之,function中的this指向调用它的对象, 默认的调用它的对象为window。
呵呵,刚刚看到其他的帖子这样描述this:有奶就是娘,很贴切啊!
还有其他的一些常见的讨论,见下面的讨论贴:
http://www.iteye.com/topic/189102
http://www.iteye.com/topic/122569
分享到:
相关推荐
以上只是【狂神说系列 JavaScript笔记】中可能涵盖的部分知识点,通过深入学习和实践,你将能够掌握JavaScript的核心概念,从而在Web开发领域游刃有余。无论你是前端工程师还是全栈开发者,这份笔记都能为你的...
在JavaScript中,匿名函数是一种没有名称的函数,通常作为参数传递或者用于立即执行。在上述文档中,我们看到几种不同的匿名函数使用方式: 1. **匿名函数自执行**:`(function(){})()`,这种写法会立即执行该匿名...
本资源为个人Javascript学习笔记的精华版,涵盖了Javascript的基础知识、事件处理、对象和系统函数、浏览器对象等方面的内容。下面是对每个知识点的详细说明: 1. 什么是JavaScript? JavaScript是一种脚本语言,...
JavaScript中的匿名函数和闭包是两个非常重要的概念,它们在函数式编程和模块化开发中起着关键作用。 首先,让我们来理解匿名函数。匿名函数,顾名思义,是没有名称的函数。在JavaScript中,我们可以直接定义一个不...
函数是JavaScript中的重要组成部分,允许代码复用和封装。函数定义使用`function`关键字,可以通过参数传递值,内部可以使用`arguments`对象访问所有传入的参数。 ##### 6. 数组(Array) 数组是存储多个值的容器,...
JavaScript笔记知识点整理图文.pdf是一个非常实用的资源,涵盖了JavaScript的基本概念、变量和数据类型、运算符、控制结构、函数、数组、对象、事件、DOM等领域的知识点,为开发者提供了详细的参考资料。
JavaScript 高级笔记 - 函数的定义和调用、this 指向和改变、严格模式 JavaScript 中的函数定义和调用是编程语言的基础。函数可以定义多种方式,包括函数声明、函数表达式和 new Function()。函数的调用方式也多种...
在韩顺平的JavaScript笔记中,他深入讲解了JS面向对象编程的各个方面,包括变量的作用域、对象引用、this关键字的使用以及对象的方法。 首先,变量的作用域在JavaScript中是一个关键概念。带var和不带var声明的变量...
这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...
面向对象的JavaScript编程是JavaScript开发中的重要概念,它允许我们以类和对象的...以上就是对"面向对象javascript笔记"所涵盖知识点的详细解析。理解并掌握这些概念对于深入理解和高效地编写JavaScript代码至关重要。
JavaScript中的函数记忆是一种优化技术,它通过存储函数的先前计算结果来提高性能。函数记忆的主要思想是,如果一个函数被多次调用,并且每次调用的参数相同,那么第二次及之后的调用可以直接从缓存中获取结果,而...
JavaScript中的函数对象可以使用`Function`构造函数创建,如`var demo = new Function("x", "y", "return x+y")`。这允许动态定义函数体。 数组在JavaScript中也扮演着重要角色。可以使用`[]`快速声明数组,或者...
Javascript 中的构造函数与其他语言相比也是不同的。任何通过关键字 new 调用的函数都可以当做构造函数。 在构造函数体内,this 指向新创建的对象。如果构造函数体内没有显示的 return 表达式,那么我们就默认返回 ...
根据提供的文件信息,可以看出这份“我的javascript学习笔记”主要涵盖了JavaScript中的几个关键概念和技术要点,包括正则表达式、AJAX以及一些JavaScript的核心语言特性。接下来将这些知识点进行详细的整理和解释。...
结合提供的"listutil.js"文件,我们可以深入探讨JavaScript中的实用工具函数和编程技巧。 首先,JavaScript的高级程序设计离不开对对象的理解。在JavaScript中,对象是一种数据结构,用于存储键值对。你可以通过...
JavaScript 基础学习笔记 本资源摘要信息基于黑马视频记录的学习笔记,涵盖了 JavaScript 基础知识点,包括 HTML、CSS、JavaScript、DOM、事件处理等内容。 HTML 和 CSS 基础 * HTML 结构:head、body、title、...
在JavaScript中,`this`关键字的使用与其他编程语言有明显区别,它的指向取决于函数被调用的方式。理解`this`的工作机制对于深入学习JavaScript及其原型继承模式至关重要。以下是`this`在JavaScript中五种不同情况下...
综上所述,这篇JavaScript笔记涵盖了从基础语法到高级特性的全面学习,同时也涉及到了与之相关的工具和技术,如模板引擎Freemarker和开发环境的构建。通过深入理解和实践这些知识点,开发者可以提升JavaScript编程...