js 的闭包——我的理解

自己总结了下闭包

闭包:简单点讲就是函数A的 变量c,在内部的函数B里使用了变量c,使得函数A外部可以使用函数A内部的变量c。

接下来上代码:

 <script>
        function test(){
            var a =1;
            return function(){
                alert(a);
            }
        }
        var b=test();
        b();     //1
    </script>

执行效果如下:

再来一个

 <script>
        var test;
        function func(){
            var name=‘王洪德‘;
            test = function(){
                return name;
            }
        }
        func();
        alert(test());
    </script>

执行效果如下

再来一个

   <script>
        function test(age){
            var func = function(){
                console.log(‘func‘);
                alert(age)
            };
            age++;
            console.log(‘test‘);
            return func;
        }
        var n=test;
        n(23)();
    </script>

执行效果如下,可以看出先执行的test(先执行a++),在执行的func函数:

时间: 2024-10-06 15:31:18

js 的闭包——我的理解的相关文章

对js中闭包,作用域,原型的理解

前几天,和朋友聊天,聊到一些js的基础的时候,有一种‘好像知道,好像又不不知道怎么讲的感觉’...于是捡起书,自己理一理,欢迎拍砖. 闭包 理解闭包首先要理解,js垃圾回收机制,也就是当一个函数被执行完后,其作用域会被收回,如果形成了闭包,执行完后其作用域就不会被收回. 如果某个函数被他的父函数之外的一个变量引用,就会形成闭包 闭包的作用,就是保存自己私有的变量,通过提供的接口(方法)给外部使用,但外部不能直接访问该变量. 例子(使用闭包): var test=(function(){ var

关于js中闭包的理解

1.以前很不理解js中闭包的概念及使用,下面来看一下 function foo() { var a = 123; var b = 456; return function () { return a; } } var fn = foo(); 上面的代码只能访问 a和b,但是不能修改,这是js中闭包的技术之一 function foo() { var a = 123; var b = 456; return { get_a: function () { return a; }, set_a: fu

js中的闭包之我理解

闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩,对我来说也是一样. 但是他也是js能力提升中无法绕过的一环,几乎每次面试必问的问题,因为在回答的时候.你的答案的深度,对术语的理解以及js内部解释器的运作方式的描述,都是可以看出你js实际水平的.即使你没答对,也能让考官对你的水平有个评估.那么我先来说说我对js中的闭包的理解. 闭包是很多语言都具备的特性,在js中,闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等. 在理解闭包以前.最好能

[学习笔记]JS中闭包的理解

一.闭包概念的理解 闭包,又称为词法闭包或函数闭包指引用了自由变量的函数.这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外. 自由变量:该变量既不是函数本身定义的也不是函数参数中的变量. 1 function f1() { 2 var count = 99; 3 function f2() { 4 alert(count);//count对于f2来说是自由变量,这里函数f2引用了自由变量count 5 } 6 return f2; 7 } 这个被引用的自由变量将和这个

JS之闭包

闭包是很多语言都具备的特性,在js中,闭包主要涉及到js的几个其他的特性: 1)作用域链 2)垃圾(内存)回收机制 3)函数嵌套...等等. 首先理解一下作用域链的含义,简单来说,作用域链就是函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引. 而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高一级函数中的变量放在更后面,以此类推直至全局对象为止. 当函数中需要查询一个变量的值的时候,js解释器会去作用域链去查找,从最前面的本地变量中先找,如果没有

JS基础——闭包

有关JS中闭包的理解和使用. 一.简介 子函数可以使用父函数中的局部变量,这种行为就叫做闭包.通常指,有权访问另一个函数作用域中的变量的函数.创建时,通常在一个函数中创建另一个函数,通过另一个函数访问这个函数的局部变量. function box() { var user = 'Lee'; return function () { //通过匿名函数返回 box()局部变量 return user; }; } alert(box()()); 这里通过一个匿名函数来访问父函数中的user变量,并且返

js:深入闭包(作用域)

/** * 闭包的作用域 */ fn1(); //fn1 能够执行,不会报错,对于通过function func_name()这种写法来定义的函数,永远都会被最先初始化. function fn1(){ console.log("fn1"); } fn2(); //报错:fn2 is not a function /** *使用如下方式定义函数,不会被先执行,如果在定义之前调用,报错. *这种函数的定义方式是先在内存中创建一块区域,之后通过一个fn2的变量指向这块区域, *这块区域的函

对JavaScript闭包和原型理解

最近在学js脚本的一些东西觉得里面有2个知识点比较难理解所以做了如下总结. 1.闭包 简单的理解:一个函数a ,内部有个函数b,那么这个函数b当被作为a函数的返回值得时候被外部的全局变量引用了,那么这就是一个闭包. 官方解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 如: a=function() { var n=1; b=function( n=n+1; alert(n) } return b; } var c=a()aler

Javascript关于闭包的个人理解

关于闭包,我理解为定义在一个函数体函数内部的子函数,该子函数拥有唯一的接口和出口.作为函数体的变量被引用,函数体返回时闭包处于激活状态. 关于理解我们可以结合以下代码,我们所看到的闭包的形式: (function(){ //do something })() 1.该子函数可以访问外部函数(函数体)函数作用域中的变量丶参数丶和声明的其他的内部函数(子函数). 2.当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包. tips:闭包形式结构中的第二个括号,表示函数被调用,形成闭包