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. QML 开发神奇加成之为网络资源设置本地缓存

    QML 开发神奇加成之为网络资源设置本地缓存 直接上码: #include <QNetworkAccessManager> #include <QNetworkDiskCache&g ...

  2. 自主学习Flappy Bird游戏

    背景 强化学习 MDP基本元素 这部分比较难懂,没有详细看:最优函数值,最优控制等 Q-learning 神经网络 环境搭建 windows下通过pip安装TensorFlow,opencv-pyth ...

  3. 初探STL之算法

    算法 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包括头文件<algor ...

  4. 用Perl发送邮件小例子

    据传,Perl发送邮件有很多方案,但我只会用Mail::Sender这种方式,也就只能简单谈谈这种方式. 在参考众多网页后,程序书写如下: #!/usr/bin/perl -w use Mail::S ...

  5. react map 遍历

    1.map方法 注:map 返回的是一个新数组 class App extends Component { // constructor(props) { // super(props); // th ...

  6. dom get selector

    function realsQuery(element) { if(!element){ return ""; } var currentQuery=""; i ...

  7. Cocos2d-x学习资源

    1.CSDN博客:http://blog.csdn.net/legendof1991/article/category/2161091.主要讲的Cocos2d-x3.0 2.CSDN博客:http:/ ...

  8. Android版DesiredCapabilities参数配置

    前言 每一个App测试都应指定是在什么平台下,那个设备中运行那个App,而在Appium中主要是通过DesiredCapabilities来配置的. DesiredCapabilities的作用,负责 ...

  9. SenTestingKit.framework的报错!

    本文转载至http://www.cocoachina.com/ask/questions/show/106912 ld: building for iOS Simulator, but linking ...

  10. 通过反射调用一个单列的方法(单列必须有“getInstance”方法)

    Class<?> _clazz = Class.forName(_clazzName); if (_clazz != null) { Method _getInstance = _claz ...