无论什么时候,javascript都会把this放到function内部
。
它是基于一种非常简单的思想——如果包含this的
(特别强调!每个函数都有this。看上面的那句话。)最近的
函数
直接是某个对象的成员。那么this的值就是这个对象。如果包含this的最近的函数
不是某个对象的成员,那么this的值便设为某种全局对象(常见为浏览器中的window对象)。
下面的内部函数可以清晰的看出这种思想。
一个函数,若是分配到某个变量的,即不属于任何对象下的一员,那么this的参数就变为window对象。
var obj = {
toString:function(){//重写toString函数。这里说明下,默认情况下,Object对象都有一个toString的方法。
return "obj的范围内";
},
func:function(){
alert(this);//这里的函数直接从属于对象obj
var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已。
alert(this);
};
innerFunc();
}
};
obj.func()
结果:
以此输出“obj的范围内”和“Object Window(FF下测试)”
但是我们可以人为的改变作用域,即改变this指向的对象。
如果最后一行代码换为obj.func.call(window)。
那么两次输出的结果都为“Object Window(FF下测试)”
从上面的例子可以发现,call实际是另外一个方法,属于JS的语言核心(Runtime)为obj.func提供的内建方法。
无论是哪一个函数,主要能够typeof foo == "function"是成立的,就必然有call的方法。
修改下代码:
var obj = {
toString:function(){//重写toString函数。这里说明下,默认情况下,Object对象都有一个toString的方法。
return "obj的范围内";
},
func:function(){
alert(this);//这里的函数直接从属于对象obj
var innerFunc = function(){//这里的函数不是特定对象的直接成员,只是另一个函数的变量而已。
alert(this);
};
innerFunc.call(this);
}
};
obj.func()
这样,2次打印的结果都是"obj的范围内"。
分享到:
相关推荐
` 指令启用),`this` 在全局作用域中未绑定时为 `undefined`。 - **函数调用中**:当函数作为普通函数被调用时(而非构造函数或方法),`this` 的行为与全局上下文相同。 - **对象方法中**:在对象的方法中,`...
JavaScript通过作用域链解决自由变量的查找问题,作用域链连接了当前作用域与上层作用域,允许在不同作用域中访问变量。 (15)——闭包 闭包是JavaScript中一种强大的特性,它允许函数访问并操作其词法作用域内的...
本篇文章将深入探讨JavaScript中的函数,包括它们的定义、参数、返回值、作用域以及一些高级特性。 1. 函数定义: 在JavaScript中,函数可以使用`function`关键字来定义。例如: ```javascript function sayHello...
而在JavaScript中,由于其原型继承的特性,我们通常使用函数作用域和闭包来模拟这些行为。 下面我们将基于提供的示例代码来探索JavaScript中如何实现public、private属性和方法,以及模拟static效果。 1. public...
`this`关键字在JavaScript和TypeScript中扮演着核心角色,尤其是在对象的方法中。`this`总是引用当前上下文的对象,这取决于`this`被调用的方式。在构造函数中,`this`通常指代新创建的实例。但在其他情况下,`this`...
JavaScript是Web前端开发的核心语言,本教程聚焦于JS的进阶知识——上下文。在JavaScript中,上下文是一个至关重要的概念,它涉及到函数执行、作用域以及闭包等多个方面。理解上下文对于提升编程能力、避免常见错误...
- **函数**:函数定义、函数表达式、参数传递、作用域、闭包。 2. **进阶篇**: - **对象与属性**:对象字面量、构造函数、原型链、this指向、Object的方法(如assign、getOwnPropertyDescriptor等)。 - **数组...
7. **闭包**:闭包是JavaScript中的一个重要特性,允许函数访问并操作其外部作用域的变量,即使在其外部作用域已被销毁后依然有效。 8. **模块化**:JavaScript提供了多种模块化方案,如CommonJS(Node.js中使用)...
**JavaScript作用域** JavaScript有两种主要的作用域:全局作用域和局部作用域。全局作用域中的变量在整个脚本中都可访问,而局部作用域的变量仅在其定义的函数或块级作用域内有效。另外,ES6引入了块级作用域的概念...
箭头函数的语法简洁,其this指向与父级作用域保持一致,解决了回调函数中this指向的问题。此外,我们还需要理解闭包的概念,它是JavaScript实现数据封装和模块化的一种方式。 在JavaScript中,对象是核心概念。通过...
【描述】: "本文将深入探讨JavaScript中的核心概念——this关键字及其在不同上下文中的应用,同时也会涉及到作用域的概念,包括全局作用域、函数作用域以及块级作用域。通过实例解析,帮助开发者深化对JavaScript...
在全局作用域中,`this`通常指向全局对象(在浏览器中是`window`),在对象方法中,`this`指向调用该方法的对象。在函数调用中,`this`的确定较为复杂,需要根据调用方式(常规调用、apply/call方法、箭头函数等)来...
在JavaScript中,变量的寻址遵循静态作用域规则。这意味着变量的作用域在编写代码时就已经确定,而不是在运行时根据调用上下文来决定。这一点与动态作用域的语言(如Perl)形成鲜明对比。 **示例代码分析:** ```...
此外,《JavaScript语言精粹》还会深入讨论作用域、变量提升、this关键字、事件处理、DOM操作以及异步编程,如回调函数、Promise和async/await。这些知识点对于前端开发人员来说至关重要,因为它们直接影响到网页的...
在学习JavaScript时,理解原型链、闭包、作用域以及this关键字的用法是必不可少的。同时,熟悉ES6及以后的新特性,如箭头函数、模板字符串、解构赋值、let和const等,能帮助开发者写出更简洁、高效的代码。 对于...
- **作用域**:了解全局作用域和局部作用域,以及ES6的块级作用域。 3. **对象与数组** - **对象**:JavaScript中的对象是键值对的集合,通过花括号`{}`创建。属性访问可以用点号或方括号语法。 - **数组**:...
同时,会深入讨论函数作用域,包括全局作用域、局部作用域以及闭包,这是JavaScript中高级特性的基础。 **第8部分:对象与数组** 这部分介绍了JavaScript的核心数据结构——对象和数组。对象是键值对的集合,可以...
对于`let`和`const`声明,JavaScript引入了块级作用域,它们不会被提升。 此外,JavaScript是单线程的,但通过事件循环(Event Loop)和异步编程模型(如回调函数、Promise、async/await)来处理并发任务。事件循环...
1. 声明变量:使用`var`、`let`或`const`关键字,其中`let`和`const`是ES6新增的,它们具有块级作用域。 2. 数据类型转换:包括类型判断(`typeof`)和类型转换(如`Number()`、`String()`、`Boolean()`)。 二、...