浅谈匿名函数和闭包

简介:

什么是匿名函数和闭包 ? 函数我们最常见的是 function fn(){},这样的 申明 然后fn()调用这个函数 但是我们还有一种是表达式函数 var ss = function(){}这样的 也可以叫匿名函数 然后赋值给ss 其实这两种函数最主要的区别是 第一种是fn()在任何位置都可以调用函数 但是第二种在申明var ss =function(){}前调用这个函数 就会报错 因为找不到这个函数 其实第二种函数 很像我们申明一个变量一样 var s = 100; 在此申明s之前 用alt(s);也是肯定会报错 一样的道理!这是表达式函数 但是我们最常见的匿名函数是这样的格式:(function(){})(); 最后一个括号是指立即触发这个函数 !当然在最后括号里面可以传参,那么什么是闭包 闭包个人理解 可以分为一个简单的理解和复杂的函数理解!下面写个函数如下:

var s = "博主";

function a(){

var m = 44;

   alert(s); //当然会弹出“博主”;因为它是全局函数 在任何函数任何地方都可以访问,那么我在a函数内在写个函数

alert(k); //不能访问 因为k是b函数内的局部变量 那么外部函数是不能访问其他函数内的局部变量的

  function b(){

   var k=123; 

    alert(s);//也可以访问 

    alert(m);//可以正常访问 因为b函数在a函数内 那么相对于a函数来说 那么m是b函数的全局变量;

}

b();

}

a();//在最外面调用这个函数  

这上面是简单的闭包;那么是下面的复杂的理解javascript的闭包

 

 
 
  1. <script> 
  2. //在ECMAScript中,在函数声明处向函数外部看到的声明的所有变量,在函数内部都能访问到它们的最终值! 
  3.   function fnTest(arr) { 
  4.         for (var i=0;i < arr.length;i++) { 
  5.             arr[i]=function () { 
  6.                 alert(i+" | "+arr[i]); 
  7.             }; 
  8.         } 
  9.     } 
  10.     var arr = [0,1,2,3,4,5]; 
  11.     fnTest(arr); 
  12.     for (var i=0;i < arr.length;i++) { 
  13.         arr[i]();//始终输出6还有一个undefined 
  14.         //因为函数退出后,i值为6,所以访问到的值只有6 
  15.     } 
  16. </script> 

总之 闭包函数

闭包函数只能访问变量的最终值!!!










本文转自 涂根华 51CTO博客,原文链接:http://blog.51cto.com/tugenhua/735856,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
存储 Swift
24 闭包和闭包表达式
闭包和闭包表达式
43 0
|
9月前
|
JavaScript 前端开发
对闭包的理解以及使用
对闭包的理解以及使用
29 1
|
11月前
|
存储 缓存 前端开发
详解 Reat 中的闭包问题
JavaScript 中的闭包一定是最可怕的特性之一。 即使是无所不知的 ChatGPT 也会告诉你这一点。 它也可能是最隐秘的语言概念之一。 每次编写任何 React 代码时,我们都会用到它,大多数时候我们甚至没有意识到。 但最终还是无法摆脱它们:如果我们想编写复杂且高性能的 React 应用程序,我们就必须了解闭包。
87 0
详解 Reat 中的闭包问题
|
前端开发
闭包
前端面试
|
PHP 开发者
匿名函数闭包|学习笔记
快速学习匿名函数闭包
102 0
匿名函数闭包|学习笔记
闭包的使用
闭包的使用
57 0
|
自然语言处理 JavaScript
你真的懂闭包么?
前言 本文主要总结一下 到目前为止对闭包的理解. 好几年之前学习闭包的时候模模糊糊,看了网上的一些帖子,理解为:函数内部可以使用函数外部的变量,后面看了你所不知道的JS,以为自己懂了,后面面试的时候又感觉自己不懂了,而今感觉自己真正懂了==,特此记录一下。
117 0
|
C#
C#匿名函数
C#匿名函数
76 0