javascript本身是一种入门比较容易的脚本语言,这几年随着互联网的如火如荼的发展,javascirpt也一跃成为了炙手可热的前台脚本语言了,这里想简单总结下一个容易让初学者困惑的概念——闭包中的this。作为一个软件开发人员,还是直入主题,看看下面的代码吧:)
var name = "Frederick";
function fn(){
var name = "海绵宝宝";
return function(){var name = "Frederick";
alert(this.name);
}
}
fn()();//Frederick
有的朋友可能会问为什么alert()弹出的是“Frederick”而不是“海绵宝宝”呢?这里就设计到了闭包作用域内的this关键字的引用问题,请记住一般情况下闭包内部的this指向的window对象,因此上面的代码alert()的提示信息是“Frederick”。如何控制闭包的this指针呢?请看下面简单的例子:
var name = "Frederick";
function fn(){
var name = "海绵宝宝",
self = this;
return function(){
alert(self.name);
}
}
fn()();//海绵宝宝
分享到:
相关推荐
JavaScript中的闭包是一种强大的特性,它允许函数访问和操作其外部作用域中的变量,即使在其外部函数已经执行完毕的情况下。官方定义中提到,闭包是一个包含了许多变量和这些变量的环境表达式的函数,这些变量成为了...
JavaScript中的Function类型是编程语言的核心概念之一,它既是创建可执行代码的构造器,也是一种数据类型。在JavaScript中,函数是一种一等公民,这意味着函数可以作为变量赋值、作为参数传递,甚至作为其他函数的...
在JavaScript中,类的声明通常通过函数来实现。每个函数可以视为一个类,函数内部的局部变量相当于类的成员变量,而内部定义的函数则作为成员方法。例如: ```javascript function Person() { this.name = "Bill";...
JavaScript中的作用域和上下文是编程时必须理解的关键概念,特别是在JavaScript这种动态类型的脚本语言中。作用域决定了变量的可见性和生命周期,而上下文则与`this`关键字的值有关,它指定了当前执行代码的对象。 ...
JavaScript中的this关键字是一个非常重要的概念,它与函数的执行上下文紧密相关,决定了函数的上下文对象,即函数内的代码可以访问哪些属性和方法。在ECMAScript标准中,this的值在函数调用时确定,并且不是静态绑定...
JavaScript中的作用域、执行上下文和闭包是理解JavaScript运行机制的关键概念。本文将深入探讨这些概念,并通过实例解析它们的工作原理。 首先,我们来看**词法作用域**。JavaScript遵循词法作用域规则,意味着变量...
总结,JavaScript函数表达式是语言中的一个重要概念,涉及到递归、闭包、this对象以及模拟块级作用域等核心特性。理解这些概念对于编写高效、健壮的JavaScript代码至关重要。通过深入学习和实践,开发者可以更好地...
JavaScript中的Function类型是编程语言的核心组成...JavaScript中的Function类型不仅涉及到函数的创建和调用,还涉及到作用域、闭包、原型链、继承等多个核心概念。理解这些特性对于编写高效的JavaScript代码至关重要。
在PHP编程语言中,闭包和匿名函数是两个密切相关但略有区别的概念,但在实际使用中,它们常常被当作同一回事。PHP中的闭包是一种特殊类型的函数,它能够捕获和存储外部作用域中的变量,即使这些变量在闭包被定义后...
bind()方法是JavaScript中Function对象的一个原生方法,它用于创建一个新的函数,这个新函数的this值被指定为bind()的第一个参数,而其余参数将作为新函数的预设参数传入。它主要解决的是this指向的问题。 ### bind...
由于JavaScript的setTimeout()会将函数中的this指向window,而我们需要的this并不一定是window,所以通过apply()方法来指定函数执行时的上下文。对于函数参数的传递,也是通过apply()来实现的。 总之,函数防抖和...
在深入探讨JavaScript变量和函数的浅析之前,我们首先要明确JavaScript是一种动态类型语言,其在程序设计中扮演着核心角色。接下来将详细解释有关变量与函数的基础知识点: ### 变量 在JavaScript中,变量是一种...
JavaScript中的`setTimeout()`和`clearTimeout()`是两个非常重要的函数,它们主要用于实现异步编程中的定时操作。在JavaScript中,由于其单线程执行的特性,`setTimeout()`和`clearTimeout()`提供了延迟执行代码和...
需要注意的是,当使用匿名函数时,由于每次声明都会创建新的函数对象,因此在`removeEventListener`时必须提供与添加时相同的函数引用,这通常很难实现,因此通常推荐使用具名函数或者闭包来处理。 事件对象在事件...
以上内容就是关于JavaScript面向对象编程的浅析,通过理解JavaScript中的函数即对象、构造函数、prototype属性以及如何封装私有成员等概念,我们可以更好地利用JavaScript进行面向对象编程,编写出结构更清晰、可...
闭包允许我们引用定义在外部函数中的变量,而外部函数执行完毕后,这些变量也不会被销毁,因此可以持续存储缓存数据。 以JohnHann的实现为例,memoize函数接受两个参数:一个要被缓存的函数func和一个上下文context...