闭包

js函数(续)

亡梦爱人 提交于 2020-03-12 04:43:23
一、全局变量和局部变量 全局变量:当前js页面中均可使用的变量【 声明 在函数外面的变量】,整个js页面中均可以使用。 局部变量: 声明 在函数内部的变量,只能在函数内部使用。 eg: var a = 1; console.log(a); function test(){ console.log(a); //1 var b = 2 // c = 3; //c变量为全局变量,它的声明提前了【在页面的开始声明】 console.log(b); //2 } console.log(b); //错误提示:b is not defined 二、函数的使用 函数作为函数的参数使用:(可以作为 回调函数 使用) eg: function test(fun){ var msg = '我是test()函数中的变量msg'; fun(msg); } //函数test的调用 test(function(param){ console.log(param); //输出:我是test()函数中的变量msg }); 函数作为返回结果来使用: eg: function test(){ return function(){ console.log('我是test()函数的返回函数中的输出语句'); }; } //函数test的调用 test(); //test();的返回值为:function(){console

javascript的闭包机制

余生长醉 提交于 2020-03-12 02:18:12
闭包产生的条件 当内部函数被保存到外部,就会产生闭包。闭包会导致原有作用域链不释放,造成内存泄露。 详细点:闭包是在函数被调用时才被创建,与作用域链的访问顺序有关,只有内部函数访问上层作用域链的变量对象时,才会形成闭包。 例子 function test ( ) { var arr = [ ] ; for ( var i = 0 ; i < 10 ; i ++ ) { arr [ i ] = function ( ) { console . log ( i ) ; } } return arr ; } var myArr = test ( ) ; for ( var j = 0 ; j < 10 ; j ++ ) { myArr [ j ] ( ) ; //输出10个10 闭包保存了i i最后一次是10 } 这样写估计解释得不是很清楚,那么我们换个写法 下面的代码与上面等价 var i ; function test ( ) { var arr = [ ] ; for ( i = 0 ; i < 10 ; i ++ ) { arr [ i ] = function ( ) { console . log ( i ) ; } } return arr ; } var myArr = test ( ) ; for ( var j = 0 ; j < 10 ; j ++ ) {

PHP之闭包详解

拜拜、爱过 提交于 2020-03-11 06:07:15
匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它。声明一个匿名函数是这样: 1 $func = function() { 2 3 }; //带结束符 可以看到,匿名函数因为没有名字,如果要使用它,需要将其返回给一个变量。匿名函数也像普通函数一样可以声明参数,调用方法也相同: 1 $func = function( $param ) { 2 echo $param; 3 };$func( 'some string' ); 4 //输出: 5 //some string 顺便提一下,PHP在引入闭包之前,也有一个可以创建匿名函数的函数:create function,但是代码逻辑只能写成字符串,这样看起来很晦涩并且不好维护,所以很少有人用。 实现闭包 将匿名函数在普通函数中当做参数传入,也可以被返回。这就实现了一个简单的闭包。 下边有三个例子 1 //例一 2 //在函数里定义一个匿名函数,并且调用它 3 function printStr() { 4 $func = function( $str ) { 5 echo $str; 6 }; 7 $func( 'some string' ); 8 }printStr(); 9 10 //例二 11 //在函数中把匿名函数返回,并且调用它 12 function

php : 匿名函数(闭包) [一]

放肆的年华 提交于 2020-03-11 04:40:37
摘自: http://www.cnblogs.com/starlion/p/3894578.html 一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数( closures ), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。( http://php.net/manual/zh/functions.anonymous.php ) 匿名函数的定义: $closureFunc = function(){     .... }; eg: 把匿名函数赋值给变量,通过变量来调用 $closureFunc = function($str){    echo $str; }; $closureFunc("hello world!"); 输出: hello world! 二:闭包 2.1 将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包 function closureFunc1(){ $func = function(){ echo "hello"; }; $func(); } closureFunc1(); //输出: hello 2.2 在匿名函数中引用局部变量 function closureFunc2(){ $num = 1; $func = function(){

php中的匿名函数和闭包

与世无争的帅哥 提交于 2020-03-11 03:56:32
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数( closures ), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。( http://php.net/manual/zh/functions.anonymous.php ) 匿名函数的定义: 1 $closureFunc = function(){ 2 3     .... 4 5 }; eg: 把匿名函数赋值给变量,通过变量来调用 1 $closureFunc = function($str){ 2 3    echo $str; 4 5 }; 6 7 $closureFunc("hello world!"); 输出: hello world! 二:闭包 2.1 将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包 1 function closureFunc1(){ 2 $func = function(){ 3 echo "hello"; 4 }; 5 $func(); 6 } 7 closureFunc1(); 8 //输出: hello 2.2 在匿名函数中引用局部变量 1 function closureFunc2(){ 2 $num = 1; 3 $func = function(){ 4 echo

php中的匿名函数和闭包(closure)

青春壹個敷衍的年華 提交于 2020-03-10 23:51:13
一:匿名函数 (在php5.3.0 或以上才能使用) php中的匿名函数(Anonymous functions), 也叫闭包函数( closures ), 允许指定一个没有名称的函数。最常用的就是回调函数的参数值。( http://php.net/manual/zh/functions.anonymous.php ) 匿名函数的定义: $closureFunc = function(){     .... }; eg: 把匿名函数赋值给变量,通过变量来调用 $closureFunc = function($str){    echo $str; }; $closureFunc("hello world!"); 输出: hello world! 二:闭包 2.1 将匿名函数放在普通函数中,也可以将匿名函数返回,这就构成了一个简单的闭包 function closureFunc1(){ $func = function(){ echo "hello"; }; $func(); } closureFunc1(); //输出: hello 2.2 在匿名函数中引用局部变量 function closureFunc2(){ $num = 1; $func = function(){ echo $num; }; $func(); } closureFunc2(); //Notice:

JS基础(回调函数)

﹥>﹥吖頭↗ 提交于 2020-03-08 14:29:13
什么是回调函数? 一个回调函数,也被称为高阶函数,是一个被作为参数传递给另一个函数(在这里我们把另一个函数叫做“otherFunction”)的函数, 回调函数在otherFunction中被调用。 一个回调函数本质上是一种编程模式(为一个常见问题创建的解决方案),因此,使用回调函数也叫做回调模式。 一个函数作为参数传递给了click方法。click方法会调用(或者执行)我们传递给它的函数。这是Javascript中回调函数的典型用法, 它在jQuery中广泛被使用。 回调函数是怎样运作的? 因为函数在Javascript中是第一类对象,我们像对待对象一样对待函数,因此我们能像传递变量一样传递函数, 在函数中返回函数,在其他函数中使用函数。当我们将一个回调函数作为参数传递给另一个函数是,我们仅仅传递了函数定义。 我们并没有在参数中执行函数。我们并不传递像我们平时执行函数一样带有一对执行小括号()的函数。 需要注意的很重要的一点是回调函数并不会马上被执行。它会在包含它的函数内的某个特定时间点被“回调”(就像它的名字一样) 这个匿名函数稍后会在函数体内被调用。即使有名字,它依然在包含它的函数内通过arguments对象获取。 回调函数是闭包 都能够我们将一个毁掉函数作为变量传递给另一个函数时,这个毁掉函数在包含它的函数内的某一点执行,就好像这个回调函数是在包含它的函数中定义的一样

Swift学习(2函数闭包)

大兔子大兔子 提交于 2020-03-08 07:10:49
函数的定义 1.函数的基础写法 func 函数名(形参列表)->返回值类型 例: func sum(x:int ,y:int) -> int{ return x+y } print(sun(x:10,y:50)) 2.外部参数的使用,就是在形参前加一个名字,外部参数不会影响函数内部细节,外部参数会让外部调用看起来更加的直观 例:func sum(num1 x:int ,num2 y:int )-> int{ return x+y } print(sum(num1:30,num2:40)) 使用“_”可以替代不关心的展示方式,常见的还有for循环中”i”如果没有用到的情况向,可以用“_”代替 func sun(_ x:int ,_ y:int )-> int{ return x+y } print(sum(30,40)) 3.默认值:通过给参数设置默认值,在调用的时候,可以任意组合参数,如果不指定就使用默认值。但是在OC中是不能实现的,需要定义多个函数 例 :func sum(x:int=1,y:int=2)-> int{ return x+y } print(sum()) print(sum(x:10,y:10)) print(sum(x:10)) … 4.无返回值的情况:主要用在闭包 例: func demo() {} func demo1() ->() {} func

js闭包

余生颓废 提交于 2020-03-08 01:09:26
​ 今天呢咱们来聊聊这个js闭包,我们基本上在面试中,必然会问到的问题:什么是闭包?说说你对闭包的理解.闭包的作用是什么? ​ 闭包也是一个很不好理解的概念,往往我们遇到的机会很多很多,很多朋友呢都说了对闭包的理解,问题表达的方式不一样,但是呢,最后都对闭包没有很清晰的理解.所以呢我这边就帮助大家理解什么是闭包.其实说起来,可以深,也可以浅.先由浅着说.之前呢,在网上也是找了不少的资料,看见人家理解的闭包,我提取出了说法有问题 的4点: ​ 1.闭包是指有权访问另一个函数作用域中变量(参数)的函数(不可取) ​ 2.闭包就是能读取其他函数内部变量的函数(不可取) ​ 3.闭包可以理解成定义一个函数内部的函数(不可取) ​ 4.函数就是闭包(不可取) ​ 这4点呢,其实呢,怎么说呢,不能否认它是错的,只能说不严谨,第一点,可以得到一个结论,闭包是一个函数,第二点也差不多的意思,第三点有意思了,定义一个函数内部的函数,的确有这个特征,而第四点,其实也是对的,因为MDN上的解释是:闭包是一个特殊的函数对象.那上面的几种说法都是不严谨的,其实最终我查询资料,都归纳了一句话: ​ 当一个函数能够记住并访问到其所在的词法作用域及作用域链,特别强调是在其定义的作用域外进行的访问,此时该函数和其上层执行上下文共同构成闭包 ​ 怎么理解这句话呢,其中包含两个新的名词,词法作用域及作用域链

javascript 面向对象

自闭症网瘾萝莉.ら 提交于 2020-03-07 12:23:37
1. arguments An array-like object corresponding to the arguments passed to a function. arguments.callee   Reference to the currently executing function. arguments.caller --- arguments.callee.caller   (Obsolete)   Reference to the function that invoked the currently executing function. arguments.length   Reference to the number of arguments passed to the function. function myConcat(separator) { var result = ""; // iterate through non-separator arguments for (var i = 1; i < arguments.length; i++) { result += arguments[i] + separator; } return result; } document.write(myConcat('-', "red", "green"