javaScript--浅谈闭包

作用域就不说了,先来理解一个概念:作用域链

当定义一个函数时,它实际上保存一个作用域链。

当调用这个函数时,它创建一个新的对象来存储他的局部变量,并将这个对象添加至保存的那个作用域链上,同时创建一个新的更长的表示函数调用作用域的‘链’。

下面来举个栗子:

var scope = ‘G scope‘;
function checkscope(){
          var scope = ‘L Scope‘;
          function f(){
                      return scope;
                         }
          return f();
 }
checkscope();  //   ‘L Scope’

var scope = ‘G scope‘;
function checkscope(){
          var scope = ‘L Scope‘;
          function f(){
                      return scope;
                         }
          return f;
 }
checkscope()(); //  ‘L Scope‘

简单来说, 定义  f  时候生成 的 作用域链保存了当前作用域的所有对象,包括 var scope = ‘L Scope’;  这个局部变量。

函数定义时的作用域链到函数执行时依然有效。这句话就是闭包的精髓了。

时间: 2024-10-07 18:44:16

javaScript--浅谈闭包的相关文章

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架

JavaScript:浅谈iOS与H5的交互-JavaScriptCore框架 前言 小的作为一个iOS程序猿,可能研究JavaScript以及H5相关的知识并不是为了真正的要去转行做这一方面,其实更多的为了要研究OC中的JavaScriptCore框架,JavaScriptCore框架主要是用来实现iOS与H5的交互.当然了,最早我曾经写过iOS浅谈webView的JS一种用法.(去掉web显示页的广告),这种算得上最简单的iOS与H5的交互了.现在混合编程越来越多,H5的相对讲多,所以研究J

浅谈闭包机制

var foo = "Hello"; var c =(function a() { function b(){ var bar = " World"; alert(foo + bar); return bar; } return b; })()(); alert(foo + c); 本实例弹出两次hello world: 一.什么是闭包? “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式

浅谈闭包

在刚接触JS面向对象得时候,对闭包是真的不理解,但是在经过多次的查看资料后终于对闭包这个东西有了简单的认识和运用. 首先闭包是指一个函数调用了除其自身以外的变量的时候,就会形成一个闭包.(基本上都是一个子函数去调用它的父函数中的同级变量) 闭包的原理:在浏览器执行的时候,解释器会去检测,子函数是否引用了除其自身以外的变量,若引用就会形成一个闭包(也可以叫安全气泡).此时,外部的函数就不能引用安全气泡里的变量. 闭包的作用:1:可以防止变量污染:2:能够实现缓存:3:在封装插件的时候用. 副作用:

浅谈闭包(Closure)

一.闭包 好长时间对于闭包都知道与函数和其环境变量有关系,但是一直没有一个清晰的认识.今天查看了一下维基百科,顺便写下来. 二.闭包的定义 在编程语言中,闭包(语义闭包或函数闭包)是指哪些可以将语义范围内命名变量 绑定到语言的一类对象-------函数.操作上,一个闭包就是一条存储着 函数和其环境变量 的记录:映射着 函数的变量(变量在本地使用,但是在闭包环境中定义) 和 值或者引用(其名称在闭包创建时就进行绑定).一个闭包(和普通函数不一样)允许函数访问 其引用的变量(通过闭包拷贝其值和应用)

深入javascript 浅谈对象

又一周的结束,下周js就要结束,但自己感觉对js印象很模糊,对对象.属性.方法.事件.调用函数很不熟悉,不知道怎么分类,也不知道什么时候触发事件,总之一句话,分界很模糊,知其然,却不知其所以然,恼火! 首先,建立js,就要面向对象的概念,谈到面向对象,就不可避免的要涉及类的概念.要实现一般用: 1.工厂方式: 这种方式每次调用它的工厂函数,都会创建一个新对象. 2.构造函数方式: 在构造函数中,内部无创建对象,而是使用this关键字. 3.原型方式: 该方式利用了对象的prototype属性,可

[iOS、Unity、Android] 浅谈闭包的使用方法

前言 我们经常所编程语言的的进步速度是落后于硬件的发展速度的. 但是最近几年,闭包语法在各个语言中都有自己的体现形式,例如 • C语言中使用函数指针作为回调函数的入口: • Java和C#语言中的Lambda语法表达式; • Objective-C语言中的Blocks语法; • C#语言中的Delegates语法; • C++语言中的Functions对象; 历史 Peter J. Landin 在1964年将术语 闭包 定义为一种包含 环境成分 和 控制成分 的实体,用于在他的SECD 机器上

javascript -- (浅谈querySelector和querySelectorAll)

W3规范: querySelector: return the first matching Element node within the node's subtress. if there is no such node, the method must return null. 返回指定元素节点的子树中匹配selector的集合中的第一个,如果没有匹配,返回null. querySelectorAll: return a NodeList containing all of the mat

Web前端原生JavaScript浅谈轮播图

1.一直来说轮播图都是困扰刚进业内小白的一大难点,因为我们不仅需要自己作出一个比较完美的运动框架(虽然网上一抓一大把,但是哪有比自己做出来实现的有成就感,不是吗?^_^),还必须需要非常关键性的把握住轮播的原理,这样才能把一个轮播图完美的呈现出来. 2.废话不多说,请看下面代码 1 //首先我们必须都明确,一个好的运动框架那必须是能够同时承载两种或多种以上需求的,所以我们应该避免单运动框架通过行内样式的局限性,就需要我们知道怎么去获取非行间样式 2 function getStyle(obj,a

使用JavaScript浅谈组合模式

什么是组合模式? 从前有座山,山上住着一个老和尚和小和尚,老和尚给小和尚讲了一个故事,这个故事是这样子的:从前有座山,山上住着一个老和尚和小和尚,老和尚给小和尚讲了一个故事,这个故事是这样子的:从前有座山,山上住着一个老和尚和小和尚,老和尚给小和尚讲了一个故事,这个故事是这样子的... 骚年,读到这里不知道你明白了什么,一个故事由另一个故事组成,然后一直这样子组合下去,形成了一个最大的故事. 没错,这就是组合模式:小对象组合成一个大对象,小对象可能由更小的对象组合而成. 其实我们也可以看出两点:

浅谈 JSON.stringify 方法

用过 json 的应该都知道,把一个对象通过 stringify 之后提交给后台或者存储在 Storage 里是很常用的手段.但是 IE6-7 下没有 JSON 对象,所以要借助 json2.js 来实现. 今天我们来简单介绍下 stringify 方法的一些正确使用姿势吧.当然,让高手们贱笑了,本文只是分享一些方法给新手朋友们. var data = [ {name: "王尼玛", sex:1, age: 30}, {name: "王尼美", sex:0, age