美文网首页
js-函数(闭包)

js-函数(闭包)

作者: 冰激凌_db91 | 来源:发表于2017-03-05 13:59 被阅读0次

1:闭包:一个函数外加上该函数所创建时所建立的作用域。闭包的名字来源于闭包“关闭”一个函数中自由变量的访问的权利。我们所说的变量是自由的,是指该变量定义在函数外部的,而非函数内部。这个不懂。。。。如果一个函数访问了它的外部变量,那么它就是一个闭包。
2:function create(start){return function(step){start+=step;return start;}};var inc=create(5)(1);
3:闭包是一个代码执行完成后离开作用域环境依然存在的例子。这个懂。。
4:for(var i=0;i<5;i++){ (function(){return function(){return i;}result.push(i)}())};不成功的闭包。
5:var result=[];
for(var i=0;i<5;i++){
(function(){
var func=function(){
return i;
};
result.push(func)
}());
}二改,还是出来的函数。返回的数组
6:var result=[];
for(var i=0;i<5;i++){
(function(){
var pos=i;
var func=function(){
return pos;
};
result.push(func)
}());
}三改,
7:函数变量可以保存在函数的作用域内,因此看起来就好像是函数将变量包起来了。包含变量的函数就是闭包。---有权访问另一个函数作用域内变量的函数就是闭包。
8:函数声明和函数表达式。给一个函数加上括号就把他从一个声明变成了表达式。可以直接调用。
9:闭包的三个条件:访问所在的作用域,函数嵌套,在所在作用域外被调用。
10:初级阶段:function f(value){var b=value;return function(){return b;}};f('libateer')();
11:高级一点:var n;function f(){var b=1123;n=function(){return b;}};n();
12: 在高级一点:function show(first,last){var name="hello";function make(){return name+first+""+last}return make()};show("lilei","wanggua");
13:在高级一点:(function (first,last){var name="hello";function make(){return name+first+""+last}return make()})(str,str);
14:for(var i=0;i<7;i++){(function (first,last){var name="hello";function make(){return name+first+""+last}return make()})(i-100,i+100);}和上面那个差不多了吧。。
15:在在高级一点:function hello(){var name=999;return {get:function(){return name;},set:function(id){name=id;}}}var f1=hello();f1.set('lailai');f1.get();
16:找到那个怎么搞的了?function f(){var a=[];for(var i=0;i<4;i++){a[i]=function(){return i;}}return a;};var a=f();和原来出的一样现在f()函数出来的还是函数,所以要这样a1;我要取到他的函数,在把这个函数表达出来。但是现在他的值还是4.是最后的,所以要在那里吧那个替换了。var pos=i;来个这个东西。
17:闭包的经常用法:var db = (function() {
// 创建一个隐藏的object, 这个object持有一些数据
// 从外部是不能访问这个object的
var data = {};
// 创建一个函数, 这个函数提供一些访问data的数据的方法
return function(key, val) {
if (val === undefined) { return data[key] } // get
else { return data[key] = val } // set
}
// 我们可以调用这个匿名方法
// 返回这个内部函数,它是一个闭包
})();

db('x'); // 返回 undefined
db('x', 1); // 设置data['x']为1
db('x'); // 返回 1
// 我们不可能访问data这个object本身
// 但是我们可以设置它的成员
17:函数的参数和变量不会被垃圾回收机制所回收,因为他是一只被另一个函数所引用的。
18:闭包的好处:希望一个变量长期的驻扎到里面,避免全局变量的污染。
19:回到初级:function aaa(){var a=1;return function(){a++;console.log(a)}};var b=aaa()不论是这种形式,还是下面的function aaa(){var a=1;var a=function(){a++;console.log(a)};return a;};一开始都要这样:先把原函数取出来。
20:var a=(function(){var a=1;return function(){a++;console.log(a)}})();有那么点意思了,a();执行时变成了这样。、
21:用法:模块化代码,私有成员方法的存在。
22:var a=(function(){
var a=1;
function a1(){
a++;
console.log(a);
}
function a2(){
a+=3;
console.log(a+100);
}
return {
a1:a1,
a2:a2
}
})()我让他私有了。。a.a1();
23:又来了:window.onload=function(){
var Oli=document.getElementsByTagName('li');
for(var i=0;i<Oli.length;i++){
var pos=i;
Oli[i].onclick=(function(){
console.log(pos);
})(pos);
}--改造以后for(var i=0;i<Oli.length;i++){

            Oli[i].onclick=(function(i){
                return function(){console.log(i)}
            })(i);
    }可以不给上面括号的加参数,但是不能不给下面的传参数。但是这个是自执行函数,不点击都会出结果。

24:(function(i){
Oli[i].onclick=function(){
console.log(i);
}
})(i)为什么变成这个就是两个都要加I而且他还不会是自执行的函数。
15:闭包注意:IE下的内存泄漏:
16:函数表达式的形式:var a=function(){console.log(a)};(function(){console.log(a)})() 函数表达式可以直接加一个()执行。
25:函数声明会被欲解析出来,如果我们想要在一些语句中实现不用的函数,一定要用函数表达式。匿名函数表达式和具名函数表达式。
26:

相关文章

  • js-函数(闭包)

    1:闭包:一个函数外加上该函数所创建时所建立的作用域。闭包的名字来源于闭包“关闭”一个函数中自由变量的访问的权利。...

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • 关于逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包当函数执行过程中,执行的函数内部的闭包,...

  • 3.逃逸闭包,非逃逸闭包

    逃逸闭包:当函数执行结束后,才去调用函数内部的闭包,叫做逃逸闭包非逃逸闭包:当函数执行过程中,执行的函数内部的闭包...

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • day14-函数(3)装饰器

    一、闭包函数 闭包函数=函数嵌套定义+函数对象+名称空间与作用域 闭包函数 1、闭:指的是该函数是定义在一个函数内...

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • JS的闭包

    1.闭包的概念 闭包函数:声明在一个函数中的函数,叫做闭包函数。闭包:内部函数总是可以访问其所在的外部函数中声明的...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 2018-07-10swift4与swift 3.3 语法重拾(

    函数与闭包 闭包

网友评论

      本文标题:js-函数(闭包)

      本文链接:https://www.haomeiwen.com/subject/iyhsgttx.html