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. pycharm索引index时间很长的原因

    pycharm进行索引index的目的时代码自动补全,当引入新的插件时,就会增加索引时间,插件越多,索引时间越长 没有好的解决办法,除非增加硬件:或者不使用代码自动补全功能

  2. Java面试题集(151-180)

    摘要:这部分包括了Spring.Spring MVC以及Spring和其它框架整合以及測试相关的内容,除此之外还包括了大型站点技术架构相关面试内容. 151. Spring中的BeanFactory和 ...

  3. PPT中的图像失真

    现象:Office PowerPoint 保存出来的PPT文件在WPS下播放的时候会出现图像失真的显现. 解决方法:Office PowerPoint打开PPT将里面的图像另存为BMP格式的图像文件, ...

  4. SolidEdge 如何绘制剖视图

    如果要创建剖视图,则点击切割平面按钮,然后绘制剖面线,画好之后点击完成   然后点击剖视图按钮,鼠标单击刚才的剖面线,往要的方向拖动,即可生成剖面视图   剖视图有时也需要用到旋转剖视图 如下图所示, ...

  5. ThinkPHP中$map用法

    ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于CURD等任何操作,作为where方法的参数传入即可,下面来一一讲解查询语言的内涵. 查询方式ThinkPHP可以 ...

  6. 8. Smarty3:模版中的内置函数

    smarty3中对内置函数的修改比較大,加入了很多新的功能:变量声明.表达式,流程控制,函数.数组等.可是建议不要在模版中去使用过于复杂的逻辑,而是要尽量将一些程序设计逻辑写到PHP中,并在模版中採用 ...

  7. c程序设计语言第一章5

    练习1.20请编写程序d e t a b

  8. addEventListener event

    addEventListener   先看个例子: document.getElementById("myBtn").addEventListener("click&qu ...

  9. java远程调用rmi入门实例

    RMI是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol). ...

  10. TestNG demo

    下载TestNG的归档文件 下载最新版本的TestNG的jar文件,详细请点击访问 http://www.testng.org..在写这篇教程的时候,我下载TestNG中-6.8.jar,并将 tes ...