JS学习:第二周——NO.1回调函数

【回调函数】

定义:把一个函数的定义阶段,作为参数,传给另一个函数;

  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(要保留小数的个数);

时间: 2024-10-19 01:26:30

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

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

Node.js 异步编程的直接体现就是回调. 那什么是回调呢?回调指的是将一个函数作为参数传递给另一个函数,并且通常在第一个函数完成后被调用.需要指明的是,回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应.回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数.例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回.这样在执行代码时就没有阻

Ext JS学习第二天 我们所熟悉的javascript(一)

此文用来记录学习笔记: •ExtJS是一个强大的javascript框架,如果想真正的掌握ExtJS,那么我们必须要对javascript有一定的认识,所以很有必要静下心来,抱着一本javascript书籍,恶补一番.推荐书籍<javascript高级程序设计>.<javascript设计模式>. •在这里我们学习一下可能你从未接触过的javascript,这些javascript知识是我们要学好ExtJS这个框架非常有必要的.必备的知识.我们需要掌握的内容有: –javascri

node.js学习第二天--进程管理

1.简介 process是一个全局内置对象,可以在代码中的任何位置访问此对象,这个对象代表我们的node.js代码宿主的操作系统进程对象. 使用process对象可以截获进程的异常.退出等事件,也可以获取进程的当前目录.环境变量.内存占用等信息,还可以执行进程退出.工作目录切换等操作. 下面我们一起来学习一下process对象的一些常用方法. 2.cwd函数的基本用法 当我们想要查看应用程序当前目录时,可以使用cwd函数,使用语法如下: process.cwd(); 获取程序目录的方法就是这样简

js执行顺序/Promise优雅解决回调函数嵌套

先执行同步 然后把settimeout(function xx(){}放进堆栈 然后执行回调 function xx() /** * Created by Administrator on 2016/10/28. */ // nodejs 封装操作文件的功能 fs var fs = require('fs'); //同步读取 // var str = '' // str += fs.readFileSync('./data/01','utf-8'); // str += fs.readFileS

Java学习第二周总结

2018年7月22日 暑假第二周马上就要结束了,这一周我继续学习了java. 本周学到了一些Java的修饰词,比如static.private.public等,这些修饰词用法与c++类似,很容易掌握.也学会了创建对象,学到了如何创建类的构造方法.还学到了如何使用Java里一些基础类的方法,比如String类.StringBuffer类.仅仅只是String类里就有30多种方法可供使用.除此之外,还学到了代码块.类的继承.方法的重写这些知识. 本周花在学习上的时间估计达到25小时,周一至周五平均每

马哥教育学习第二周总结

第二周总结 1.linux 各个文件夹的作用 2.挂载(关机挂载是可以自动挂载,开启挂在什么呢?) 3.ldd 查看程序的依赖 库 4. Linux的文件类型:管道符,字符,块设备 5.特殊文件的删除"-a"的方法 6.生成大文件的方式和查看二进制文件方法   dd if=/dev/zero of=/data/haha bs=1M count=1024:创建全是0的二进制文件.    查看二进制文件方法 xxd / hexdump -c(看16进制) 7.linux 的文件系统:   

python学习第二周

一.基础概念: 1.模块 python中有两种类型的模块,一种是标准模块,即python自带模块,另外一种是第三方模块,这种模块需要通过easy_install或者pip方式下载 第一周学习的getpass模块即标准模块,通过import getpass即可调用 系统管理中常用的两个模块,os与sys模块 1)os模块: os.system: >>> import os >>> os.system('df -h') Filesystem Size Used Avail

JS学习第二天----JS语言核心

JS语言核心 有些东西,对于初学者来说,可能看不懂,我在这里只是想说一下,JS里面有这么个情况,并不是说让你掌握,你只需要大致浏览一下就可以了. // 所有在双斜杠之后的内容都属于注释 //变量是表示值的一个符号名字 //变量通过var关键字来声明,案例: var x;//声明一个变量x //值可以通过等号赋值给变量 x=0;  //现在变量x的值为0 x //=>0:通过变量获取其值 //JS支持多种数据类型 x=1; //数字 x=0.01; //整数和实数公用一种数据类型 x="he

暑假学习第二周

这周学习了一些Java的数据类型(和c.c++的基本相似)以及Java的输入语句,其中一种方法是对于每个不同的类型有不同的输入语句,另一种是将输入的数据转换为字符型需要用的时候需要转换语句在进行转换. 在循环语句这方面,Java不仅有while.for.do-while这三种循环语句还添加了一种专门用于数组的循环语句foreach语句,他不需要下表就可以遍历整个数组. Java的类我也看了一小部分,这周前面几章看的有些不仔细,类的知识也了解了一些. 本周世界课后题来学习,看自己那里不会去查询哪方