0 0

javascript 对象里的闭包怎样调用自身的参数5

var bar = {
	x: 200,
	init: (function() {
		alert(x);
	}())
}
var bar = {
	x: 200,
	init: (function() {
		alert(this.x);
	}())
}
var bar = {
	x: 200,
	init: (function(cx) {
		alert(cx);
	}(this.x))
}

 

怎样自执行的时候输出正确的x值?

2012年9月21日 09:44

2个答案 按时间排序 按投票排序

0 0

采纳的答案

楼主的样例代码实际上是javascript对象定义的语法,并不是闭包。楼主可能混淆了它们之间的区别。

闭包应该是这样:

var bar = function(){
    var x = 200;
    var init = function(){
        alert(x);
    }
};

init函数被bar函数所包裹,叠加了bar函数的作用域,因此在init函数中的代码可以访问到bar函数的局部变量x,形成闭包。

javascript对象定义:

var bar = { 
    x: 200, 
    init: (function() { 
        alert(x); 
    }()) 
}

因为对象定义不会形成作用域,所以init指向的那个匿名函数并不会得到有关bar的任何信息,更不会知道x的存在,所以无论如何努力,都是无法访问到x的。

我猜测楼主的本意可能是想有个初始化函数init,可以初始化对象bar中的成员变量x。

那还是得这样写:

var bar = { 
    x: 200, 
    init: function() { 
        alert(this.x); 
    }


bar.init(); // 需手动呼叫init函数出场,初始化x。如果在定义bar对象的同时,就通过init所指向的函数完成bar对象的初始化,这是不可能的。

2012年9月24日 08:54
0 0

这是不行的。

因为(function() { 
        alert(this.x); 
      }())   这是一个匿名函数调用 上下文不是bar 而是整个全局 此时bar在window上海没有绑定 所以无法调用  此处this是window

实在不行可以
var bar = {
    x: 200
};
bar.init = function() {
                  alert(bar.x);
              }();

2012年9月21日 12:27

相关推荐

    Javascript 闭包完整解释

    **闭包**是一个非常重要的JavaScript概念,它指的是一个函数能够记住并访问其外部作用域中的变量的能力,即使该函数在其外部作用域之外被调用也是如此。具体来说,闭包是由函数及与其相关的引用环境组合而成的一个...

    浅谈JavaScript for循环 闭包_.docx

    我们可以使用闭包将变量i传递给内层函数,然后在onclick事件中使用该参数。 4、加一层闭包,i以局部变量形式传递给内层函数 我们可以使用闭包将变量i传递给内层函数,然后在onclick事件中使用该局部变量。 5、加一...

    基于javascript 闭包基础分享

    4. 高阶函数:闭包可以作为高阶函数来使用,即可以接受函数作为参数,或者返回一个函数。这在创建事件监听器、定时器、异步操作等场景非常有用。 理解闭包的关键在于理解JavaScript的作用域规则。在实际应用中,...

    javascript闭包

    ### JavaScript闭包详解 #### 一、闭包概念与工作机制 **闭包**是JavaScript中最强大的特性之一,它使得函数能够记住并访问其定义时所在的作用域中的变量。要理解和运用闭包,首先需要理解作用域、作用域链以及...

    JavaScript面向对象的支持

    JavaScript的函数可以访问其自身、其父作用域以及全局作用域的变量,形成了闭包现象。闭包允许函数访问和修改外部环境的状态,为实现私有变量和模拟类的封装提供了可能。 6. **原型扩展与自定义**: 通过`Object....

    JavaScript闭包深入理解.pdf

    当函数执行时,会创建一个执行上下文,其中包含一个活动对象,存储函数的参数、局部变量和函数定义。作用域链则是访问变量的一系列查找规则,从当前作用域开始,向上遍历作用域链,直到找到变量。 总的来说,闭包是...

    【JavaScript源代码】js闭包和垃圾回收机制示例详解.docx

    ### JavaScript闭包与垃圾回收机制详解 #### 一、闭包 ##### 1.1 闭包是什么? 闭包(Closure)是JavaScript中一个非常重要的概念,它涉及到函数及其相关的词法作用域。简单来说,闭包就是能够访问其自身作用域...

    JavaScript必知必会(九)function 说起 闭包问题

    JavaScript中的闭包是一种重要的编程概念,它涉及到函数和作用域的关系。在JavaScript中,每个函数都有自己的作用域,即在函数内部定义的变量只能在该函数内部访问。然而,当函数内部创建了一个函数并返回它时,这个...

    浅谈JavaScript for循环 闭包

    在此方法中,通过使用一个外部函数创建局部变量temp,并在循环内部调用该函数,每个迭代的i值被保存在局部变量temp中。这样,每个点击事件都能访问到正确的i值。 5. 返回一个函数作为响应事件。 这种方法是第3点...

    JavaScript 例子(JavaScript 源码html格式)

    5. **函数和闭包**:函数是可重复使用的代码块,而闭包则是能访问其自身作用域以及外部作用域变量的函数。例子会展示如何使用函数作为参数、返回函数,以及闭包在内存管理中的应用。 6. **异步编程**:JavaScript的...

    JavaScript各种使用例子

    本资源包"JavaScript各种使用例子"收集了一系列JavaScript的实际应用示例,旨在帮助开发者更好地理解和运用JavaScript。下面我们将深入探讨其中可能涵盖的知识点。 1. **基础语法**:JavaScript的基础包括变量声明...

    javascript中的闭包概念与用法实践分析

    为了克服这个问题,可以将循环变量作为参数传递给闭包,或者使用立即执行函数表达式(IIFE)来创建每次迭代的独立闭包作用域。 3. 在ECMAScript 6(ES6)中,使用let关键字声明的变量具有块级作用域,它在循环中会...

    javascript中文经典帮助手册

    闭包是一种能访问自身作用域、父级作用域甚至全局作用域的函数,它在内存管理中起着关键作用。作用域决定了变量的可见性和生命周期,全局作用域在整个脚本中都可访问,而函数作用域只在其内部可用。异步编程是...

    JavaScript面向对象

    JavaScript是一种广泛使用的脚本语言,它支持面向对象编程(OOP)。虽然JavaScript不是传统意义上的面向对象语言(如Java或C++), 但它通过一些独特的特性实现了面向对象的功能。 **JavaScript的基础数据类型**包括: -...

    面向对象的_JavaScript_编程及其_Scope_处理

    每个JavaScript对象都有一个原型对象(prototype),这个原型对象可以有自己的原型对象,形成了一个原型链。当试图访问一个对象的属性时,如果该对象自身不存在该属性,则会沿着原型链向上查找,直到找到该属性为止...

    javascript源代码_经典实例100.rar

    1. **基本语法**:JavaScript的基础包括变量声明、数据类型(如字符串、数字、布尔值、对象等)、运算符(算术、比较、逻辑等)、流程控制(条件语句if...else、switch,循环语句for、while等)以及函数定义与调用。...

    javascript函数速查

    JavaScript函数是编程语言的核心组成部分,它是一段可重复使用的代码块,可以接受参数并返回值。在JavaScript中,函数不仅可以作为表达式,还能作为变量赋值、作为参数传递以及作为返回值。本速查指南将深入探讨...

    悟透javascript

    总的来说,理解JavaScript的关键在于掌握其基本数据类型、函数的使用以及面向对象的实现方式。通过将数据和代码视为不可分割的整体,我们可以更好地设计和编写高效、可维护的JavaScript代码。无论是在前端网页交互、...

    百度地图API详解之事件机制,闭包机制,marker事件,信息窗口,叠加层

    2. **闭包机制**:在JavaScript中,闭包是一种特殊的函数,可以访问其自身作用域、外部函数作用域以及全局作用域的变量。在事件处理函数中,由于事件触发时可能在循环或其他上下文中,闭包用于保存和隔离变量的值,...

Global site tag (gtag.js) - Google Analytics