-
js闭包中this指向的问题10
下面是百度今年的一个笔试题:var myObject = { foo:"bar", func: function() { var self = this; console.log("outer func: this.foo = " + this.foo); console.log("outer func: self.foo = " + self.foo); (function (){ console.log("inner func: this.foo = " + this.foo); console.log("inner func: self.foo = " + self.foo); }()); } } myObject.func();
结果是 bar bar undefined bar
关于第三个undefined我是这样理解的:func是myObject对象的属性方法,所以其内部this指向myObject对象本身。而此属性方法内部的匿名立即执行函数是独立的,其this指向自身的执行上下文,引用不到外部的foo,所以是undefined。但由于作用域链使用self可以通过self引用到外部,所以第四个是bar。
我是这样理解的,并且我做了个推论:
function outer(){ this.i = 10; alert(this.i); (function(){ alert(this.i); }()); }; outer();
按道理第二次弹出对话框是undefined才对,可是它却是10!它这里怎么又能通过this引用外部的i了呢?why?
请大神不吝赐教!2014年10月12日 18:10
5个答案 按时间排序 按投票排序
-
采纳的答案
两个this都是指window.
function outer(){
this.i = 10;
alert(this === window)
alert(this.i);
(function(){
alert(this.i);
alert(this === window)
}());
};
outer();
想要出现undefined,改成new outer();2014年10月13日 15:17
-
function outer(){
console.log(this);
(function(){
console.log(this);
}());
};
用这种方法自己尝试一下就出来了,拿到支持console的浏览器里面跑一下就出来了。2014年10月19日 17:15
相关推荐
在JavaScript中,this关键字是一个特殊的变量,它指向函数的执行上下文。在对象的方法中,this通常指向调用该方法的对象。但是,使用原型继承时,继承方法中使用的this的值是原始对象,而不是在其中查找方法的原型...
在JavaScript中,`this`关键字的指向取决于函数的调用方式: 1. 作为对象方法调用时,`this`指向该对象。 2. 使用`new`关键字创建实例时,`this`指向新创建的对象。 3. 直接调用函数时,`this`通常指向全局对象(在...
理解 `this` 的行为有助于避免常见的陷阱,如闭包中的 `this` 问题,以及在异步操作中可能出现的 `this` 指向问题。 总的来说,`this` 是 JavaScript 中一个关键的特性,它提供了对象间的关联和方法调用的上下文。...
然而,`this`关键字在这些定时器函数中的指向问题常常会给初学者带来困扰。 在JavaScript中,`this`的值取决于它被调用的上下文。通常,如果函数是作为对象的方法调用,`this`将指向那个对象。但在`setTimeout`和`...
### JavaScript闭包高级教程 #### 简介 在JavaScript编程中,“闭包”是一个非常重要的概念,尤其对于希望深入理解和高效使用JavaScript的开发者来说。简单地说,闭包是一种能够记住并访问其创建时周围环境的函数...
`this`关键字在JavaScript中也是一个关键点,它指向函数调用时的上下文。`this`的值取决于函数如何被调用,而不是函数如何被定义。例如,`call`方法可以改变`this`的指向,就像`o1.fun.call(o2)`那样。 活动记录...
// 在getNameFunc内部,this指向obj对象 return function () { console.log(this.name); // 当这个匿名函数独立调用时,this仍然指向window }; } }; var c = obj.getNameFunc(); c(); // 输出 'The Window' ```...
Angular.JS中的this指向是JavaScript中this关键字在特定框架环境下的应用,由于JavaScript的作用域和this指针行为会根据不同的调用方式产生不同的绑定,了解这些规则对于开发Angular.JS应用至关重要。本文将详细介绍...
这个资源是关于WEB面试的第三阶段面试真题,涵盖了JavaScript高级知识点,包括构造函数、this指向、函数调用、闭包、setTimeout、apply等方面。下面是对每个问题的详细说明: 1. 构造函数和this指向: 在这个问题...
在JavaScript中,`this`关键字是一个非常重要的概念,它的指向问题常常困扰初学者。`this`的值在不同的上下文中可能会有不同的指向,理解其工作原理是深入学习JS的基础。下面我们将详细探讨几种常见的`this`指向情况...
JavaScript中的`this`关键字是一个非常重要的概念,它在不同场景下有不同的指向,常常困扰着开发者。...在实际开发中,常常需要利用闭包或保存`this`的引用(如使用`that`、`self`等变量)来解决`this`指向问题。
在JavaScript中,事件处理函数中的`this`关键字常常会因为不同的绑定方式而指向不同的对象,导致运行时出现不符合预期的结果。通常情况下,我们使用`.bind`、`.call`或`.apply`方法来明确指定函数内部`this`的指向。...
`this`在JavaScript中并不像其他语言中的`this`那样简单地指向对象本身,而是根据函数调用的方式动态确定其指向。理解`this`的工作方式对于编写高质量的JavaScript代码至关重要。 1. **默认绑定**: - 当函数被...
在`main.js`文件中,可能包含了对`this`指向问题的测试代码,通过各种调用方式来验证`this`在不同环境下的行为。`README.txt`文件可能解释了测试的目的和如何运行测试。 总的来说,理解`this`的指向是掌握...
#### 一、JavaScript闭包简介 在JavaScript中,闭包(Closure)是一个非常重要的概念,它允许一个函数访问并操作其外部作用域中的变量,即使该函数在其外部作用域之外被调用。这种特性使得闭包成为一种强大的工具,...
闭包是JavaScript中的一个核心概念,对于理解函数式编程以及JavaScript中的作用域和变量访问机制至关重要。 闭包(Closure)是函数和声明该函数的词法环境的组合。简单来说,一个闭包允许一个函数访问并操作函数...
JavaScript中的`this`关键字是一个非常重要的概念,它在不同场景下的指向可能会有所不同,这使得理解和掌握`this`的用法成为前端开发人员必备的技能。本文将深入探讨`this`在JavaScript中的各种情况下的指向。 1. ...
在Vue.js框架中,`computed`属性是用来定义基于其他数据属性计算得出的值。它提供了一种便捷的方式来处理数据,并且这些计算结果会被缓存,只有当依赖的属性发生变化时才会重新计算。然而,在使用`computed`时,尤其...
在事件触发时,使用this关键字可以引用到事件触发时的元素,因为在事件处理函数中,this通常指向触发事件的元素。这样就不需要依赖于外部循环变量i的值了。例如: ```javascript for(var i = 0; i ; i++) { var ...
2. 指向该对象(在全局里面this指向window,在某个对象里面this指向该对象,在闭包里面this指向window) var user="the Window"; var box={ user:'the box', getThis:function(){ return this.user;