`

javascript 闭包 和 函数异步执行的举例

阅读更多
<style type="text/css">
#a1{
background:url(img/Alaphabet-d.jpg);
  background-repeat:no-repeat;
background-position:0px -0px;
height:210px;
width:210px;
}   

这个css 显示一副大图(字母表)的一部分(每个字母)

用 javascript 控制显示

有两种写法

第一种写法,是我的写法,传参进入 setInterval 中,直接返回一个带参数的函数

function change1(x_i){
if(document.styleSheets[0].cssRules){
document.styleSheets[0].cssRules[0].style["background-position"]="-0px -"+String(215*x_i)+"px";
}
}
function load(){
var i=0;
setInterval(function(){i++;j++; if(i==5) i=0;if(j==5) j=0; change(i,j);},2000);


第二种写法,很有意思

javascript 是异步执行,把所有函数都扔到一个堆栈里,顺序执行

function change1(x_i){
if(document.styleSheets[0].cssRules){
document.styleSheets[0].cssRules[0].style["background-position"]="-0px -"+String(215*x_i)+"px";
}
}
function load(){
var i=0; j=2;
for(i=0;i<50;i++){
    ( function(){var j=i;setTimeout(function(){change1(j%5);},1000*j); }  )();
}

}


这个红色字体为什么不能写成下面呢?
      var j=i;
    setInterval(function(){change1(j%5);},2000);

因为不用闭包包起来,就不能形成自己的作用域,j 值就是变化的

为什么不能写成下面这样呢?
(function(){var j=i;setTimeout(function(){change1(i%5);},1000*j); }  )();

首先用 function(){ }() 括起来,就形成了一个自己的域
用j=i ,在此域内获得i 值, 堆栈中的值是存入每次变化的参数

如果直接传参数为i

程序会首先执行完循环, 把函数扔到堆栈中,然后拿出来执行,当执行的时候,i 已经循环结束,为循环最后一个值, 这时候所有的函数参数都一样的
分享到:
评论

相关推荐

    Javascript闭包与函数柯里化浅析_.docx

    Javascript闭包与函数柯里化浅析_.docx

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    尚硅谷——JavaScript闭包

    JavaScript闭包 JavaScript闭包 JavaScript闭包 JavaScript闭包

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C++的程序员来说是一个新的语言特性。本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ...

    js闭包函数

    学习javascript闭包函数的实用文档,讲解全面、详细。pdf格式,

    Javascript闭包与函数柯里化浅析

    闭包和柯里化都是JavaScript经常用到而且比较高级的技巧,所有的函数式编程语言都支持这两个概念,因此,我们想要充分发挥出JavaScript中的函数式编程特征,就需要深入的了解这两个概念,闭包事实上更是柯里化所不可...

    JavaScript闭包函数访问外部变量的方法

    主要介绍了JavaScript闭包函数访问外部变量的方法,本文使用匿名函数来实现在闭包中访问外部变量,需要的朋友可以参考下

    Javascript 闭包完整解释

    Javascript 闭包完整解释

    JavaScript闭包和立即执行函数的个人笔记

    闭包和立即执行函数一、闭包二、闭包的作用三、闭包形式四、立即执行函数五、使用环境六、小练习 一、闭包 当a函数已经执行完了,b函数才开始。 原创文章 10获赞 3访问量 453 关注 私信 展开阅读全文 作者:...

    深度探讨javascript函数的原型链和闭包

    深度探讨javascript函数的原型链和闭包

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    javascript闭包详解中文word版

    资源名称:javascript闭包详解 中文word版   内容简介: Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态语言C/C 的程序员来说是一个新的...

    【JavaScript源代码】详解JavaScript闭包问题.docx

    通过将闭包视为核心语言构件的组成部分,JavaScript语言展示了其与函数式编程语言的紧密联系。由于能够简化复杂的操作,闭包在主流JavaScript库以及高水平产品代码中日益流行起来。 一、变量的作用域 在介绍闭包...

    数据库求属性集闭包&函数依赖闭包

    4) 计算函数依赖的闭包。此步骤不作要求,但要会方法。个人总结:将所有属性元素组成一个集合(域)记为R;求R的所有子集(要用到第二步中的全排列~~~),设其中一个为Ri;对每一个子集求其闭包,记为Ri+;然后求Ri...

    JavaScript闭包和回调详解

     闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包有三个特性: 1.函数嵌套函数; 2.函数内部可以引用外部的参数和变量; 3.参数和变量不会被垃圾回收机制回收。  ...

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    javaScript闭包技术资料

    javaScript闭包技术资料

    JS匿名函数、闭包

    匿名函数,也称为拉姆达函数,是一种使用JavaScript...JavaScript中的匿名函数和闭包都是非常有用的特性,利用它们可以实现很多功能。不过,因为创建闭包必须维护额外的作用域,所以过度使用它们可能会占用大量内存。

    javascript 闭包实例下载

    javascript 闭包实例下载

    轻松学习Javascript闭包函数

    主要帮助大家轻松学习掌握Javascript闭包函数,从闭包的含义出发,由浅入深学习Javascript闭包函数,感兴趣的小伙伴们可以参考一下

Global site tag (gtag.js) - Google Analytics