this调用的几种类型:

1.普通调用(函数名())===指向window

funtion fn(){function fn(){console.log('我是fn函数:',this);function a(){console.log('我是a函数:',this);}a()}// 进行调用fn()
}

如上所示:该函数进行调用时,指向window

2.对象调用方式(对象名.函数名())====点前面是谁this就指向谁

   var obj = {a:function(){console.log(this);}}div.onclick = function(){obj.a()}

该this指向源对象obj

3.定时器调用:通过定时器调用的函数都指向window

4.事件处理函数:this指向事件源(绑定该事件的元素)

强制改变this指向

1)call

语法:函数名.call()

参数:call里边第一个参数是this的指向,从第二个开始往后的就是形参赋值

特点:改完立即调用

fn.call(obj, 10, 20, 30, 40)
    fn()

2)apply

语法:函数名.apply()

参数:第一个参数是this指向,第二个参数是一个数组或者伪数组,数组中的每一项是形参赋值。

特点:改完立即调用

fn.apply(obj, [10, 20, 30, 40])

fn()

3)bind

语法:函数名.bind()

参数:第一个是this指向,第二个参数爱是一次是依次形参赋值(传参和call一样)

特点:改完不会立即调用,而是返回一个新的函数,新的函数中就是改完this指向之后的

var res =  fn.bind(obj, 10, 20, 30, 40)

res()

console.log('=========');

fn()

3.新增的变量let和const

在es6新语法中新增了2个定义变量的关键字

分别是let和const,let我们叫做变量  const我们叫做常量

      let和const  与   var的区别:

1.从预解析角度分析

let和const没有预解析,所以要求变量必须先定义在使用,如果定义之前使用会报错

var会做预解析,所以定义之前用和定义之后用都不会报错

2.重复的变量名

let和const在定义的时候不允许出现重复的变量名,重名直接报错

但是var在定义的时候出现重复的变量名是不报错的

3.块级作用域

var定义的变量是没有块级作用域的,只有函数的{}才能显示var的使用范围

let和const定义的是有块级作用域的

什么叫块级作用域?任何一个可以执行代码的{}都叫做块级作用域,都可以限制变量的使用范围

    let和const的区别

4.修改值的问题

let定义的量后期值是可以修改的

const定义的量后期值不允许修改

let一般叫做变量  const一般叫做常量

一般我们获取元素都是在一开始获取依次,后期就再也不获取,再也不更改了,所以一般获取元素可以使用const去定义

5.初始值的问题

let定义的可以不写初始值,因为后期再赋值也可以

const定义的必须写初始值(因为const后期无法再重新赋值,如果一开始就不写初始值,以后就都没有,所以规定必须写)

4.内存问题

基本数据类型是直接存储在栈空间中,复杂数据类型是名字存储在栈空间中,真实的数值存储在堆空间中,会把堆空间的地址给到变量。

在赋值时:

基本(简单)数据类型:是直接把数据复制一份给到另外一个人,2个人互不影响

复杂(引用)数据类型在赋值的时候不会把真实的数据给另一个人,而是会把存放这个数据的空间地址给另一个人

那么这样就会造成2个人共用同一个空间地址,一个人改变了空间里的东西,另外一个人一定会受到影响。

5.箭头函数

箭头函数是es6中推出的新的定义函数的方式

其实就是对声明式函数、赋值式函数(匿名函数)的简写形式

箭头的语法:()=>{ }

( )中是写形参的,=>就是箭头函数的标志,{ }就是函数中代码段的

  特点:

1.省略function不写

2.还可以省略小括号()不写,形参只有1个的时候才可以省略

如果没有形参或者有1个以上的形参小括号()必须写

3.{ }也可以省略不写,前提:函数体内只有一句代码的时候

如果不写{ }会把这句话当作返回值。

4.箭头函数中是没有arguments的

在普通函数中天生自带一个叫做arguments的东西,它里面存储了所有的实参

5.箭头函数中没有this

但是如果你在箭头函数中写了this,那么这个this到底指向谁呢。

箭头函数自己没有this,他会用他父亲函数的this

6.不能当作构造函数函数

js中的this及箭头函数相关推荐

  1. 前端学习(3272):js中this的使用箭头函数

  2. [react] 在React中什么时候使用箭头函数更方便呢?

    [react] 在React中什么时候使用箭头函数更方便呢? 合成事件当中使用箭头函数比较方便 注意点在于当事件作为props传递给子组件时,会造成额外的性能损耗 个人简介 我是歌谣,欢迎和大家一起交 ...

  3. JS中的变量提升和函数提升

    console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...

  4. JS:ES6-4 简化对象与箭头函数

    简化对象代码示例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  5. js中变量名提升和函数名提升

    首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生 ...

  6. js中的变量提升和函数提升——精炼版

    javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...

  7. JS中的setTimeout和setInterval函数

    目录 前言 setTimeout setTimeout()函数应用之点名器 setInterval setInterval应用之重写点名器 前言 在生活中,常有定时做某事,或者循环做某事的需求,如设置 ...

  8. js中apply和Math.max()函数的问题?

    2019独角兽企业重金招聘Python工程师标准>>> var arr=[1,3,6,3,7,9,2]; console.log(Math.max.apply(null,arr)); ...

  9. js中for循环调用回调函数,一直循环最后一个

    js的for循环中使用回调函数,获取到的值总是最后一个值?_MLAY-CSDN博客_js 循环回调函数

最新文章

  1. 吴恩达:2020 年,这些 AI 大事件让我无法忘怀...
  2. ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
  3. window下安装nvm、node.js、npm的步骤
  4. log4j/slf4j
  5. 培训班出身的程序员怎么了
  6. java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
  7. python 常用简单代码
  8. 初中数学抽象教学的案例_《数学核心素养“数学抽象”的实践案例研究》
  9. cesium——鼠标拾取坐标并转换为经纬高
  10. 25个酷炫的Matplotlib图表,附Python源码
  11. 日系P2P原理探究(一) — Winny元祖: Freenet
  12. 栈——后进先出的增删改查
  13. 导出微信聊天记录生成词云
  14. ddos应急处理_DDoS攻击应急体系知多少?
  15. 自动化功能测试平台TestComplete的分布式测试教程(一)
  16. 阿里巴巴的AI价值观,以及“ET大脑”战略
  17. 仿微信朋友圈图片上传
  18. 积分商城小程序定制开发
  19. SpringCLoud实战微服务之——微服务简介以及入门使用
  20. word文档如何在标题前面加上对应的层级数字编号

热门文章

  1. AGC001E BBQ Hard [dp]
  2. python爬虫requests和bs4引入
  3. Android隐藏标题栏
  4. ipad极品飞车无限狂飙无法连接服务器,极品飞车:无极限赛车总是显示无法连接网络...
  5. 思科《计算机网络》第一章测试答案
  6. 小程序组件的初始化方法attached
  7. 看雪安全接入KSA开放内测
  8. consul 服务健康检查
  9. 芮勇出任联想CTO,阿里巴巴获CIKM Cup冠军|AI科技评论周刊
  10. 苹果IOS开发常用的第三方库总结