javascript匿名函数与闭包

匿名函数是相对于有名字的函数

如function setAge(){}函数名为setAge

而类似于function(){}则就是一个匿名函数

有名字的函数执行时可以写成setAge(),而没有名字的函数则执行要写成(function())();

另一种方式是把匿名函数赋值给一个变量来使用

var a=function(){
alert("hello,world");
}
a();

匿名函数传参

(function(age){
return age;

})(100);

匿名函数产生闭包

闭包简单来说就是一个函数里面还有函数(一般来说是匿名函数),看代码:

function box(){
var a=10;
return function(){
alert("hello")
 }
}box()//返回function(){ alert("hello") }一串代码box()()//再加一个()才执行了匿名函数,返回hello

关于闭包解释,上面的说明太粗俗了,下面具体说明

有权访问另一个函数作用域内变量的函数都是闭包

闭包源于js作用域链问题,在js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量

function box(){
var a=10;

}

alert(a)//未定义,全局无法访问函数体内的var a=10变量,但有时我们需要外部能够取得这个局部的a变量,这时我们怎么做呢?闭包方式来了

利用js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量这一原理,我们在box(){}内再构建一个函数,这事var a对于这个新构建的函数来说就是他的“全局变量”

例如

function getCircle(){
var pi=3.1415926;//局部变量,怎样要外面的alert取得pi呢
return function (){//写一个函数,这个函数可以取得pi的值
  return pi;//这个pi值一旦调用getCircle()就可以return出匿名函数里的这个pi
}
}
alert(getCircle()());

使用闭包的好处有什么?

在js中一旦function执行完毕,里面的变量都会被垃圾回收,被销毁,可以这样理解,js中局部变量优先于全局变量执行,函数体执行完毕后,就被销毁,所以全局变量就无法访问局部了。在一些情形中,我们需要将局部变量保存下来,我们就要用到闭包了。

总结:闭包好处:

一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

function box(){
var a=0;
return function(){
    a=a+1;
return a;
}
}
var b=box();
b();//1
b();//2

每次执行一次b() var a都不会清零,而是保留了上次的结果!

时间: 2025-01-02 17:35:41

javascript匿名函数与闭包的相关文章

JavaScript匿名函数和闭包

概述 在JavaScript前端开发中,函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure).也就是说,闭包可以让你从内部函数访问外部函数作用域.在JavaScript,函数在每次创建时生成闭包.匿名函数和闭包可以放在一起学习,可以加深理解.本文主要通过一些简单的小例子,简述匿名函数和闭包的常见用法,仅供学习分享使用,如有不足之处,还请指正. 普通函数 普通函数由fucntion关键字,函数名,() 和一对{} 组成,如下所示: 1 functi

Javascript 匿名函数与闭包

请见如下一个闭包示例: color = "red"; var obj = { color: "blue", getColor: function () { function displayColor() { return this.color; } return displayColor(); } } console.log(obj.getColor()); 在getColor函数内部再定义了一个displayColor,再又定义了一个displayColor函数,

详谈JavaScript 匿名函数及闭包

1.匿名函数函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种:这也是最常规的一种 function double(x){    return 2 * x;   } 第二种:这种方法使用了Function构造函数,把参数列表和函数体都作为字符串,很不方便,不建议使用. var double = new Function('x', 'return 2 * x;');

深入理解javascript 匿名函数和闭包

代码如下: (function(){ //这里忽略jQuery所有实现 })(); (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿 名函数又没看到运行(当然是运行了……),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多人都很清楚了(因为在我之 后也不乏来者,呵呵~).当一个匿名函数被括起来,然后再在后面加

浅谈JavaScript匿名函数与闭包

一. 匿名函数 //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){ alert('123'); }                        //语法错误,无法执行 1.简单的使用: var box =  function(){ return 'Lee'; } alert (box());        //需要调用box()方法. 2.通过自我执行来执行匿名函数 (function(){                /

[从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)

jQuery片段: [javascript] view plaincopyprint? (function(){ //这里忽略jQuery所有实现 })(); (function(){//这里忽略jQuery所有实现})(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿名函数又没看到运行(当然是运行了……),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多人都很清楚了(因为

[从jQuery看JavaScript]-匿名函数与闭包

jQuery片段: [javascript] view plaincopy (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿名函数又没看到运行(当然是运行了……),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多人都很清楚了(因为在我之后也不乏来者,呵呵~).当一个匿名函数被括起来,然后再在后面加一个括号,这

javascript匿名函数之闭包3

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="Content-Type"

javascript 匿名函数及闭包----转载

网上很多解释,我无法理解,我想知道原理...这篇文章应该可以透彻一点Query片段:view plaincopy to clipboardprint? (function(){      //这里忽略jQuery所有实现      })(); 半年前初次接触jQuery的时候,我也像其他人一样很兴奋地想看看源码是什么样的.然而,在看到源码的第一眼,我就迷糊了.为什么只有一个匿 名函数又没看到运行(当然是运行了--),就能有jQuery这么个函数库了?于是,我抱着疑问来到CSDN.结果相信现在很多