【回调函数】
定义:把一个函数的定义阶段,作为参数,传给另一个函数;
  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. FastCgi与PHP-fpm关系

    1 CGI  (1)什么是CGI: CGI(Common Gateway Interface)公共网关接口, 是WWW技术中最重要的技术之一,有着不可替代的重要地位, CGI是外部应用程序(CGI程序 ...

  2. Linus:C++是一种糟糕的语言

    本文内容摘自http://blog.csdn.net/turingbook/article/details/1775488 C++是一种糟糕的(horrible)语言.而且因为有大量不够标准的程序员在 ...

  3. 学券制(教育券、school voucher)

    美国「学券制」是怎样的一种制度?它为什么是共和党的执政政策?它在美国及其它地区有实施吗?效果如何?能否在保证公平的同时,通过市场提高教育质量? 作者:冉筱韬链接:https://www.zhihu.c ...

  4. jQuery实现动态分割

    由jQuery实现上下.左右动态改变左右.上下两个div的大小,需要自己引入jquery1.8.0.min.js包 可用于页面布局. //============================ind ...

  5. linux 常见命令

    redhat 1.获取apt软件列表 sudo apt-cache search all 2.添加用户并创建目录 sudo useradd -m username -s /sbin/bash 3.vs ...

  6. Gc.Db之循序渐进

    距离上次写Gc.Db框架已经有一段时间了,最近默默对框架代码已经做了不少优化和功能,且已经提交至nuget,大家如果想使用此框架,可以通过nuget搜索:Gc.Db进行下载和安装包. 本篇文章主要是介 ...

  7. python venv下安装mysql出错 解决方法

    1.首先使用exe文件安装python-mysql.链接: http://pan.baidu.com/s/1kVqILTX 密码: manj. 2.虚拟环境创建后,我们把已经在公共环境使用exe安装好 ...

  8. Django进阶(一)

    Url进阶 mysit/mysit/urls.py from django.conf.urls import url from django.contrib import admin urlpatte ...

  9. Docker 学习之命令详解

    1. docker version docker version 显示 Docker 版本信息. 2. docker info docker info 显示 Docker 系统信息,包括镜像和容器数. ...

  10. chose.jquery 多选

    <select id="language" data-placeholder="选择类别..." class="chosen-select&qu ...