`
编程足球
  • 浏览: 257011 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

javascript核心 -- function 之 闭包-经典案例

 
阅读更多
题目1
/*全局(window)域下的一段代码*/
function a(i) {
    var i;
    alert(i); 
};
a(10);
/*
	输出结果是: 10
	分析:
		a 函数有一个形参 i,调用 a 函数时传入实参 10,形参 i=10
		接着定义一个同名的局部变量 i,未赋值
		alert 输出 10
*/


题目2
function a(i) {
    alert(i);     
    alert(arguments[0]);
    var i = 2;
    alert(i);
    alert(arguments[0]);
};
a(10);

/*
	输出结果: 10,10,2,2
	分析:
		a 函数有一个形参i,调用 a 函数时传入实参 10,形参 i=10
		第一个 alert 把形参 i 的值 10 输出
		第二个 alert 把 arguments[0] 输出,应该也是 i
		接着定义个局部变量 i 并赋值为2,这时候局部变量 i=2
		第三个 alert 就把局部变量 i 的值 2 输出
		第四个alert再次把 arguments[0] 输出 
*/


题目3
/*全局(window)域下的一段代码*/
var i=10;
function a() {
    alert(i);
    var i = 2;
    alert(i);
};
a();
/*
	输出结果: undefined,2
	分析: js的预定义功能
*/



题目5
var i=10; 
function a() { 
    alert(i); 
    function b(){
        var i = 2; 
        alert(i);
    }
    
    b();
}; 
a();
/*
	输出结果: 10,2
	分析: 
             i的定义对于a来说,b定义的i是是私有的(比喻),
             a在查找变量a时候是一级级向上查找的,不会向下查找

*/



题目6
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}

checkscope();

function checkscope2(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}

checkscope2()();


/*
	输出结果: local scope,local scope
	分析: 
             checkscope();  局部变量作用于在函数里面都是通用的,
             checkscope2()(); f()依旧是绑定checkscope2(),checkscope2一样是存在
*/


题目7
// 数据统计1
var uniqueInteger = (function(){
    var counter = 0;
    return function(){
        return counter++;
    }  
}());
uniqueInteger();//0


// 数据统计2 通过对象
function counter(){
    var n = 0;
    return {
        count:function(){ return n++},
        reset:function(){ n=0;}
    };
}

var c = counter();
var d = counter();
c.count();//0
d.count();//0
c.reset();//
c.count();//0
d.count();//1
/*
     1.两个方法都可以访问私有变量n
     2.每次调用counter()都会创建一个   

                新的作用域链和一个新的私有变量
*/



题目8
function constfunc(v){
    return function(){
        return v;
    };
}

var funcs = [];
for(var i = 0;i<10;i++){
    funcs[i] = constfunc(i);
}

funcs[5]();//值是多少?

function constfunc(){
    var funcs = [];
    for(var i = 0;i<10;i++){
        funcs[i] = function(){return i;};
    } 
    return funcs;
}


var funcs = constfunc();
funcs[5]();// 值是多少?

/*
     结果:   5,10
     分析:   第一个funcs中的每个function都是new新的constfunc,处于不同的闭包
             第二个funcs中的每个function处于同一个闭包中,数据共享,都会返回相同的值
*/


具体可以查看javascript解析过程http://lingf.iteye.com/blog/1834909
分享到:
评论

相关推荐

    JS面向对象经典案例

    在本文中,我们将介绍JavaScript面向对象编程中的经典案例,包括对象、类、继承、原型链和闭包等概念。 一、对象和类 在JavaScript中,对象是指一个实体,可以拥有自己的属性和方法。对象可以使用工厂函数或构造...

    JS function函数 基础案例

    JavaScript中的函数是编程的核心部分,它允许我们定义可重复使用的代码块,以便在需要时调用。本教程将深入探讨JS函数的基础知识,通过实际案例帮助理解其工作原理。 一、函数定义 在JavaScript中,我们可以使用`...

    javascript的闭包介绍(司徒正美)

    ### JavaScript中的闭包详解 #### 一、闭包的基本概念 闭包是JavaScript中一个重要的概念,也是理解和掌握高阶编程技巧的关键。根据司徒正美的介绍,闭包的定义可以概括为:“闭包就是在另一个作用域中保存了一份...

    javascript 网页开发实例教程

    1. 变量与数据类型:理解JavaScript中的var、let和const声明变量的方式,以及基本数据类型(Number、String、Boolean、Null、Undefined、Symbol、BigInt)和复合数据类型(Object、Array、Function)。 2. 运算符:...

    javascript入门经典源代码

    JavaScript,一种广泛应用于Web开发的轻量级编程语言,是前端开发的核心技术之一。"javascript入门经典源代码" 涵盖了初学者在学习JavaScript过程中可能会遇到的基础概念和实践案例。这个压缩包很可能是第四版...

    javascript

    ### JavaScript核心知识点解析 #### 一、JavaScript简介与应用场景 JavaScript是一种广泛使用的脚本语言,主要应用于网页开发中,用于实现动态效果、交互功能以及增强用户体验。它不仅可以用来创建简单的网页特效...

    Javascript45个经典例子

    这个压缩包包含45个JavaScript的经典实例,以及一个名为"Javascriptjavascript使用技巧.txt"的文本文件,旨在帮助用户深入理解和掌握这门语言的核心概念及实用技巧。 1. **变量与数据类型**:JavaScript支持动态...

    JavaScript中闭包的详解

    接下来,我们来看一个经典的闭包应用案例,用于解决异步执行中的变量共享问题: ```javascript for (var i = 0; i ; i++) { setTimeout(function () { console.log(i) }, 0) } ``` 这段代码原本期望输出 0 到 3...

    Eloquent_JavaScript(JavaScript编程精解)第二版 英文版

    本书由 Marijn Haverbeke 编写,通过丰富的游戏式编程案例、清晰的概念讲解以及实践性的代码示例,让读者能够深入理解 JavaScript 的核心概念和技术。 ### 关键知识点解析 #### 1. **On Programming** 在这一部分...

    javascript 初学者经典教程,初学者的最好教材。

    JavaScript,作为一种广泛应用于网页和网络应用的编程语言,是现代前端开发的核心技术之一。对于初学者来说,掌握JavaScript基础知识至关重要,因为它是实现交互式网页、动态内容和客户端数据处理的关键工具。本教程...

    script56-old-cn.chm

    JavaScript,作为一门广泛应用于网页和互联网开发的脚本语言,是前端开发的核心技术之一。它由Netscape公司的Brendan Eich在1995年发明,最初被命名为LiveScript,后来为了与Sun Microsystems的Java语言搭上关系,...

    8个js经典代码片段

    JavaScript,简称JS,是Web开发中的核心语言,用于实现客户端的动态效果和交互。下面将详细解析这8个经典JS代码片段,它们涵盖了常见的问题解决策略,有助于提升开发者在实际项目中的技能。 1. **数组去重** 在...

    kotori-snake:Javascript的简单实践

    "Kotori Snake"项目不仅是一个简单的JavaScript实践,也是一个良好的起点,引导开发者进一步学习更高级的概念,如闭包、异步编程、模块化、ES6新特性等。通过这个游戏,你可以加深对JavaScript动态特性的理解,并...

    99_bottles_of_beer

    标题“99_bottles_of_beer”是一个经典的编程练习,源自一首同名的英文童谣,用于教学循环、条件语句以及字符串操作等基本的编程概念。在本例中,我们将关注使用JavaScript来实现这一练习。 在JavaScript中,我们...

    puissance4

    "puissance4" 是一个基于JavaScript开发的游戏项目,可能指的是经典的四子连珠(Connect Four)游戏。在JavaScript中,这款游戏通常使用二维数组来表示棋盘,并通过事件监听来处理玩家的交互。以下是一些相关的...

Global site tag (gtag.js) - Google Analytics