js、匿名函数、闭包、回调函数
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、匿名函数、闭包、回调函数的更多相关文章
- Go基础系列:函数(2)——回调函数和闭包
回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 函数可以作为另一个函数的参数(典型用法是回调函数) 函数可以返回另一个函数,即让另一个 ...
- Node.js自学笔记之回调函数
写在前面:如果你是一个前端程序员,你不懂得像PHP.Python或Ruby等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择.这段时间对node.js进行了简单的学习,在这里 ...
- php自定义函数之回调函数
回调函数,可以配合匿名函数和变量函数实现更加优美.复杂的一种函数结构.大理石平台价格 回调函数,就是在处理一个功能的时候,我让让这个功能自定义能力再强一些,我准许调用这个函数的时候,还可以传入一个函数 ...
- php变量函数,回调函数
一,变量可以直接传递函数 <?php function demo($num , $n )//$n是个函数 { for($i=0;$i<$num;++$i) { if($n($i)) { e ...
- C++中类成员函数作为回调函数
注:与tr1::function对象结合使用,能获得更好的效果,详情见http://blog.csdn.net/this_capslock/article/details/38564719 回调函数是 ...
- C++中 线程函数为静态函数 及 类成员函数作为回调函数
线程函数为静态函数: 线程控制函数和是不是静态函数没关系,静态函数是在构造中分配的地址空间,只有在析构时才释放也就是全局的东西,不管线程是否运行,静态函数的地址是不变的,并不在线程堆栈中static只 ...
- 【知识点】inline函数、回调函数、普通函数
目录 一.inline内联函数 1.1 使用 1.2 编译器对 inline 函数处理步骤 1.3 优缺点 1.3.1 优点 1.3.2 慎用内联 1.3.3 不宜使用内联 1.4 虚函数(virtu ...
- 使用匿名函数在回调函数中正确访问JS循环变量
有时候, 需要以不同的参数调用某个URL,并且在回调函数中仍然可以访问正在使用的参数, 这时候, 需要使用闭包保存当前参数, 否则, 当回调函数执行时, 之前的参数很可能早已被修改为最后一个参数了. ...
- js中匿名函数和回调函数
匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...
- JS中的匿名函数、回调函数、匿名回调函数
工欲善其事必先利其器 在学习JavaScript设计模式一书时,遇到了“匿名回调函数”这个概念,有点疑惑,查找了些资料重新看了下函数的相关知识点之后,对这个概念有了认识.九层之台,起于垒土.在熟悉这一 ...
随机推荐
- 【转】Spring框架深入理解
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...
- 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 ...
- [CSS3] Understand CSS Selector Specificity
It is hard to explain css selector specificty, to easy way to understand it is by playing around wit ...
- 翻翻git之---"有趣效果"的自己定义View EasyArcLoading
转载请注明出处:王亟亟的大牛之路 早上写了一个关于MD的文章,下午给编译器调了个色,感觉要上天了.所以为了试颜色就出了这篇文章,让大家一起瞎一下 好了废话不说.这一片给大家介绍一个当做Dialog作用 ...
- 第二种BitBand操作的方式 - 让IDE来帮忙算地址
要使用Bitband来訪问外设,一定要得出相应的映射地址.人工计算肯定是不靠谱的,并且也没人想这么干.因此能够通过Excel,拉个列表来计算.想想,这也是一个不错的招数.可是后来想想,还是嫌麻烦,毕竟 ...
- 使用网络监视器(IRSI)捕捉和分析协议数据包
转载请注明原地址. 实验名称: 理解子网掩码.网关和ARP协议的作用 一.实验目的和要求 (1) 熟悉IRIS的使用 (2) 验证各种协议数据包格式 (3) 学会捕捉并分析各 ...
- poj 3105 Expectation 按位统计
题意: 给n,求sum(i^j)/(n^2),0<=i,j<n.n<10^9 分析: 暴力n^2算法肯定超时.这是logn按位统计算法:按位先算出0出现的个数x,则1出现的个数为n- ...
- openssl 再爆惊天漏洞及紧急修复指南
openssl 又摊上大事了,2014年6月5日,SSL/TLS Man-in-the-Middle Vulnerability 该漏洞使得攻击者能够拦截恶意中间节点加密和解密数据.同一时候强迫使用弱 ...
- poj 2264 Advanced Fruits(DP)
Advanced Fruits Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1944 Accepted: 967 ...
- 设计模式学习笔记——Prototype原型模式
原型模型就是克隆. 还有深克隆.浅克隆,一切听上去都那么耳熟能详.