234567891011121314151617181920212223242526272829303132333435

闭包

闭包:闭包是指有权访问另一个函数作用域中的变量的函数
函数嵌套一个函数,并且函数内部的函数可以访问到外部函数的变量,
注意:变量会驻留在内存中,不会被回收;所以闭包少用

//一个简单的闭包
function show(){
var userName = "胖胖";
return function(){
return userName;
}
}
var fin = show();
alert(fin());

function show(){ //使用闭包实现累加
var num = 10;
return function(){
num++;
alert(num);
}
}
var fin = show();
fin();
fin();
fin();

//打印0 1 2 3
function show(){
var arr = [];
for(var i = 0; i < 4; i++){
arr[i] = (function(i){
return i; //i的返回是即时性的,返回i的值
})(i);
}
return arr;
}
var arr = show();
for(var i = 0; i < arr.length; i++){
alert( arr[i] );
}

//闭包中this问题
var obj = {
name : "胖胖",
age : 18,
sex : "男",
fin : function(){
alert(this.name); //这个this指的是obj
return function(){
alert(this); //[object Window] 这个this指的就是window
}
}
};
var show = obj.fin();
show();

//块级作用域;任何一对大括号的中的语句集都是一个块,这个块中的定义的变量是不可以见的,或者是不可以访问的
// javascript中没有块级作用域
function show(){
var str = "胖胖";
}
alert(str);

if(true){
var an = "胖胖";
}
alert(an); //这里也能访问 javascript中没有块级作用域

//可以仿块级作用域
(function(){
if(true){
var an = "胖胖";
}
})();
alert(an);//此时报错 访问不到an

//私有作用域问题
var an = "小红"; //A程序员定义的一个an变量;
var an = "胖胖"; //B程序员定义的一个an变量;
//变量冲突

(function(){ //存放A程序员代码
var an = "小红";
})();

(function(){ //存放B程序员代码
var an = "胖胖";
})()
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

回调函数

回调函数:就是调用函数的一个方式
定义:通过函数指针调用函数;

//first
function math(num1,num2){
return minus(num1,num2);
// return add(num1,num2);
}
function add(num1,num2){
return num1 + num2;
}
function minus(num1,num2){
return num1-num2;
}
alert(math(1,2));

//second
function math(num1,num2,fin){
return fin(num1,num2);
}
alert( math(1,2,add) );
alert( math(1,2,minus) );
function add(num1,num2){
return num1 + num2;
}
function minus(num1,num2){
return num1-num2;
}

//third
function math(num1,num2,fin){
return fin(num1,num2);
}
math(1,2,function(num1,num2){
return num1 + num2;
});
var num = math(1,2,function(num1,num2){
return num1 - num2;
});
alert(num);

//the last
var num = (function(num1,num2,fin){
return fin(num1,num2);
})(1,2,function(num1,num2){
return num1 - num2;
});
alert(num);
---------------------
作者:Casablanca_jhBi
来源:CSDN
原文:https://blog.csdn.net/weixin_37243717/article/details/78699588?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

js、匿名函数、闭包、回调函数的更多相关文章

  1. Go基础系列:函数(2)——回调函数和闭包

    回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数) 函数可以返回另一个函数,即让另一个 ...

  2. Node.js自学笔记之回调函数

    写在前面:如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择.这段时间对node.js进行了简单的学习,在这里 ...

  3. php自定义函数之回调函数

    回调函数,可以配合匿名函数和变量函数实现更加优美.复杂的一种函数结构.大理石平台价格 回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数 ...

  4. php变量函数,回调函数

    一,变量可以直接传递函数 <?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) { e ...

  5. C++中类成员函数作为回调函数

    注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...

  6. C++中 线程函数为静态函数 及 类成员函数作为回调函数

    线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只 ...

  7. 【知识点】inline函数、回调函数、普通函数

    目录 一.inline内联函数 1.1 使用 1.2 编译器对 inline 函数处理步骤 1.3 优缺点 1.3.1 优点 1.3.2 慎用内联 1.3.3 不宜使用内联 1.4 虚函数(virtu ...

  8. 使用匿名函数在回调函数中正确访问JS循环变量

    有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...

  9. js中匿名函数和回调函数

    匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...

  10. JS中的匿名函数、回调函数、匿名回调函数

    工欲善其事必先利其器 在学习JavaScript设计模式一书时,遇到了“匿名回调函数”这个概念,有点疑惑,查找了些资料重新看了下函数的相关知识点之后,对这个概念有了认识.九层之台,起于垒土.在熟悉这一 ...

随机推荐

  1. 【转】Spring框架深入理解

    参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...

  2. aSmack连接server异常smack.SmackException$ ConnectionException thrown by XMPPConnection.connect();

    以下是我在研究asmack4.0出现的异常 06-17 12:02:56.924: W/System.err(10622): org.jivesoftware.smack.SmackException ...

  3. [CSS3] Understand CSS Selector Specificity

    It is hard to explain css selector specificty, to easy way to understand it is by playing around wit ...

  4. 翻翻git之---&quot;有趣效果&quot;的自己定义View EasyArcLoading

    转载请注明出处:王亟亟的大牛之路 早上写了一个关于MD的文章,下午给编译器调了个色,感觉要上天了.所以为了试颜色就出了这篇文章,让大家一起瞎一下 好了废话不说.这一片给大家介绍一个当做Dialog作用 ...

  5. 第二种BitBand操作的方式 - 让IDE来帮忙算地址

    要使用Bitband来訪问外设,一定要得出相应的映射地址.人工计算肯定是不靠谱的,并且也没人想这么干.因此能够通过Excel,拉个列表来计算.想想,这也是一个不错的招数.可是后来想想,还是嫌麻烦,毕竟 ...

  6. 使用网络监视器(IRSI)捕捉和分析协议数据包

    转载请注明原地址. 实验名称:  理解子网掩码.网关和ARP协议的作用             一.实验目的和要求 (1) 熟悉IRIS的使用 (2) 验证各种协议数据包格式 (3) 学会捕捉并分析各 ...

  7. poj 3105 Expectation 按位统计

    题意: 给n,求sum(i^j)/(n^2),0<=i,j<n.n<10^9 分析: 暴力n^2算法肯定超时.这是logn按位统计算法:按位先算出0出现的个数x,则1出现的个数为n- ...

  8. openssl 再爆惊天漏洞及紧急修复指南

    openssl 又摊上大事了,2014年6月5日,SSL/TLS Man-in-the-Middle Vulnerability 该漏洞使得攻击者能够拦截恶意中间节点加密和解密数据.同一时候强迫使用弱 ...

  9. poj 2264 Advanced Fruits(DP)

    Advanced Fruits Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1944   Accepted: 967   ...

  10. 设计模式学习笔记——Prototype原型模式

    原型模型就是克隆. 还有深克隆.浅克隆,一切听上去都那么耳熟能详.