【回调函数】
定义:把一个函数的定义阶段,作为参数,传给另一个函数;
  1. 回调函数调用次数,取决于条件;
  2. 回调函数可以传参;
  3. 回调函数可以给变this指向,默认是window;
  4. 回调函数没有返回值,forEach也没有返回值;
/*Function.prototype.call=function(context){

    1)把this这个实例中的this字符串改成了call的第一个参数;如果this这个实例中,没有this字符串,就不用改了;
    2)this这个实例立即执行; this();
}*/
/*function fn(n,m){
    console.log(this,(n+m));
}
fn.call(obj,2,3);*/
//1.把call前面的函数中的this改了,参数传了;
//call把fn这个实例中的this字符串,改成了call的第一个参数;
//2.把call前面的函数-实例fn 立即执行;
var ary=[10,40,20,50];
var obj={};
Array.prototype.myMap=function(callback,context){

    context=context||window;
    //浏览器判断-性能优化
    if('map' in Array.prototype){

        return  this.map(callback,context);
    }

    var ary=[];
    for(var i=0; i<this.length; i++){

        var res=callback.call(context,this[i],i,this);
        ary.push(res);
    }

    return ary;
}
var res=ary.myMap(function(item,index,input){

    console.log(this)

    return item*100;
},obj)
console.log(res)
var obj={};
var ary=[10,40,60,20];
Array.prototype.myForEach=function(callback,context){

    //this->ary;
    context=context||window;
    if('forEach' in Array.prototype){//标准浏览器
        this.forEach();
        return;//阻断程序的执行;
    }

    //IE浏览器兼容处理;
    for(var i=0; i<this.length; i++){

        callback.call(context,this[i],i,this);
    }

};
var res=ary.myForEach(function(item,index,input){

    console.log(this===obj)

});
1.

每个对象,都是基类Object的实例;

每个函数,都是Function这个类的实例;

2.关于Object基类 和 Function类之间的关系:

1)Object.prototype 是 Function.prototype的爹;

2)Object.prototype 是 Function这个对象的爹;

3)Object instanceof Function;-》true;

4)Function instanceof Object;-》true

3.函数的三种角色:

    1)普通函数:形成私有作用域-形参赋值-欲解释-代码从上到下的执行  内存和内存释放;

    2)类:实例,原型,原型链,constructor

    3)对象:就跟普通的对象一模一样,都有属性和方法;

4.严格模式和非严格模式下改变this指向的区别:

1)非严格模式下:

    1.不传的时候,默认是window

    2.传null,默认是window

    3.传undefined,默认是window

2)严格模式 'use strict'

    1.不传的时候,默认是undefined;

    2.传什么,this就是什么;

5.call , apply , bind的功能和区别

1)call和apply用法基本一致,区别就是apply的第二个参数是数组,虽然是数组,但相对于前面函数的传参,也是从左往右一个个的传参的;

2)bind的传参方式和call一致,但是bind属于预处理机制;

    预处理机制:先把bind前面函数中的this关键字改了+参数传了,然后返回一个修改好的函数的定义阶段;

    等我们需要的时候,手动调用;
6.数字方法:数字.toFixed(要保留小数的个数);

 
 

JS学习:第二周——NO.1回调函数的更多相关文章

  1. node.js学习笔记(二)——回调函数

    Node.js 异步编程的直接体现就是回调. 那什么是回调呢?回调指的是将一个函数作为参数传递给另一个函数,并且通常在第一个函数完成后被调用.需要指明的是,回调函数不是由该函数的实现方直接调用,而是在 ...

  2. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

  3. 201671010140. 2016-2017-2 《Java程序设计》java学习第二周

                                 学习第二周(Java基本程序设计结构)      这一周,着重学习了Java的简单程序设计实现及运行,通过自己操作,发现Java的程序语法大面 ...

  4. Objective-C学习笔记 利用协议实现回调函数

    来源:http://mobile.51cto.com/iphone-278354.htm Objective-C学习笔记 利用协议实现回调函数是本文要介绍的内容,主要是实现一个显示文字为测试的视图,然 ...

  5. Cocos Creator学习三:生命周期回调函数

    1.目的:学习生命周期回调函数以及回调顺序,更有利于我们逻辑的处理把控. 2.生命周期回调函数: 节点:指cc.Node:组件:指cc.Component. ①onLoad:脚本组件绑定的节点所在场景 ...

  6. Java学习第二周学习笔记

    20145307<Java程序设计>第二周学习总结 教材学习内容总结 Java语言中的很多基本语法都和C语言类似,以下Java中的基本语法 标识符 标识符是程序中自定义的一些名称. 由26 ...

  7. DELPHI语法基础学习笔记-Windows 句柄、回调函数、函数重载等(Delphi中很少需要直接使用句柄,因为句柄藏在窗体、 位图及其他Delphi 对象的内部)

    函数重载重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同.实际上,编译器是通过检测参数来确定需要调用的例程.下面是从VCL 的数学单元(Math Unit)中摘录的一 ...

  8. H5学习第二周

    怎么说,在各种感觉中h5学习的第二周已经过来了,先总结一下,感觉学习h5是一件让我爱恨交加的事,学会一些新的知识并把它成功运行出来的时候是非常激动和兴奋的,但是有时候搞不懂一个标签或者属性的时候,就有 ...

  9. JavaScript学习-5——异步同步、回调函数

    ----------异步同步函数 ----------回调函数 一.异步同步函数 同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 同步可以 ...

随机推荐

  1. BZOJ4300绝世好(傻)题

    Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). Input 输入文件共2行. 第一行包括一个整数 ...

  2. NHibernate之映射文件配置说明

    NHibernate之映射文件配置说明 1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表 ...

  3. openssl+前端jsrsa签名+后端nodejs验签

    内容如标题所示,总体分为三个部分: 一.win10下安装openssl,然后通过openssl工具生成RSA的公钥和私钥 (1)win10下安装openssl需要的工具有:VS2013,Perl,na ...

  4. ECharts学习(4)--仪表盘

    1. ECharts中的仪表盘,要使用这个图表时把series中的type属性修改成'gauge',然后在detail中设置仪表盘详情,用于显示数据.最常用的是formatter(格式化函数或者字符串 ...

  5. Android技术分享收集

    Android高工必备技能! 我的 Android 开发实战经验总结 微信Android客户端架构演进之路 微信Android版智能心跳方案 流量优化: WebP 探寻之路 HTTP 协议缓存机制详解 ...

  6. OC与JavaScript的交互

    stringByEvaluatingJavaScriptFromString的用法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素. UIWebView是 ...

  7. svn1.6在centos6下的使用

    版本 CentOS 6:svn 1.6.11 svn1.6版本的不足在于,每个目录递归存在.svn目录:从1.7开始就只有root节点目录存在.svn目录,和git一样了. 但是因为还在用CentOS ...

  8. Android 千牛数据库分析

    标签(空格分隔): 千牛,逆向 问题:Android 千牛登陆后产生保存用户数据的db无法直接用sqlite3打开,需要解密. 反编译Apk后jd-gui查看源码.熟悉的sqlcrypto模块加密,阿 ...

  9. BZOJ2117: [2010国家集训队]Crash的旅游计划

    裸点分,点分树每层维护有序表,查询二分,复杂度$O(nlog^3n)$. #include<bits/stdc++.h> #define M (u+v>>1) #define ...

  10. ubuntu 默认防火墙安装、启用、查看状态

    ubuntu 9.10默认的是UFW防火墙,已经支持界面操作了.在命令行运行ufw命令就可以看到提示的一系列可进行的操作. 最简单的一个操作:sudo ufw status可检查防火墙的状态,我的返回 ...