javascript-js闭包的问题,总是懵懵懂懂啊

问题描述

js闭包的问题,总是懵懵懂懂啊
比如这个我是理解的,因为setTimeout是异步的,所以最后打出了10个10
for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
} 0);
}
可是这个我又不懂了,求解
(function(bar)
{

console.log(bar);

setTimeout(function() {

console.log(bar);
bar = 2;

} 1000) ;
bar = 9
})(5)
5作为参数传给这个函数,最先打出了5其次是9,我就是郁闷为什么运行到了bar = 2这一行bar的值不是2呢
有点不理解,高手指点指点,谢谢

解决方案

setTimeout定时器里面定义的函数后执行,要等1秒。
bar = 9 先执行

解决方案二:
这其实和闭包没直接关系,你要理解setTimeout里面定义的函数是异步的。
设置了定时器,此时不执行这个函数,而是继续执行下一行。
当定时器到了时间,才执行传进去的函数。

解决方案三:
定时器里的函数是后执行的,要等1秒,先执行了bar = 9

解决方案四:
编程是一种美德,是促使一个人不断向上发展的一种原动力。

解决方案五:
JS闭包问题
js 闭包 问题
JS的闭包问题

时间: 2024-10-05 17:46:49

javascript-js闭包的问题,总是懵懵懂懂啊的相关文章

javascript学习笔记(十三) js闭包介绍(转)_基础知识

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. 复制代码 代码如下: var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. 复制代码 代码如下: function f1(){ var n=999; } alert(n); // error 这里

javascript深入理解js闭包_javascript技巧

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

js闭包的用途

我们来看看闭包的用途.事实上,通过使用闭包,我们可以做很多事情.比如模拟面向对象的代码风格:更优雅,更简洁的表达出代码:在某些方面提升代码的执行效率. 1 匿名自执行函数 我们知道所有的变量,如果不加上var关键字,则默认的会添加到全局对象的属性上去,这样的临时变量加入全局对象有很多坏处, 比如:别的函数可能误用这些变量:造成全局对象过于庞大,影响访问速度(因为变量的取值是需要从原型链上遍历的). 除了每次使用变量都是用var关键字外,我们在实际情况下经常遇到这样一种情况,即有的函数只需要执行一

深入理解js闭包

深入理解js闭包 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码

js闭包所用的场合以及优缺点分析

  这篇文章主要介绍了js闭包所用的场合以及优缺点分析,十分的详细使用,有需要的小伙伴可以参考下. 先上段代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //函数a function a() { var i=0; //函数b function b() { alert(++i); } return b; } //函数c var c = a(); c(); 代码特点: 1.函数b嵌套在函数a内部; 2.函数a返回函数b. 代码中函数a的内部函数b,被函数a外面的一个变量

js闭包实现按秒计数

  js闭包实现按秒计数         闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包. 这里给大家分享一个小技巧,使用javascript闭包实现按秒计数,代码如下: ? 1 2 3 4 5 6 7 8 var i =1; for(i; i<10; i++){ (function(num){ setTi

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

闭包的定义非常晦涩--闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落.这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值(深连结).简单来说,闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁.周爱民说得更清楚,闭包就是"属性表",闭包就是一个数据块,闭包就是一个存放着"Name=Value"的对照表.

学习javascript的闭包,原型,和匿名函数之旅_javascript技巧

本文通过示例给大家介绍javascript的闭包,原型,和匿名函数,具体详情请看下文. 一 .>关于闭包 理解闭包 需要的知识 1.变量的作用域 例1: var n =99; //建立函数外的全局变量 function readA(){ alert(n); //读取全局变量 } readA(); //执行此函数 例2: function readB(){ var c = 9; function readC(){ console.log(c); //ok c可见 } return readC; }

JS闭包、作用域链、垃圾回收、内存泄露相关知识小结_javascript技巧

补充: 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点 闭包 是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露. 闭包是javascript

跟我学习javascript的闭包_javascript技巧

JavaScript 闭包究竟是什么? 用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQuery基础教程 的附录,发现附录A对JavaScript的闭包的介绍简单易懂,于是借花献佛总结一下. 1.定义 闭包:是指有权访问另外一个函数作用域中的变量的函数.创建闭包的常见方式就是在一个函数内部创建另外一个函数. 直接上例子 function a(){ v