js中的this及箭头函数
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及箭头函数相关推荐
- 前端学习(3272):js中this的使用箭头函数
- [react] 在React中什么时候使用箭头函数更方便呢?
[react] 在React中什么时候使用箭头函数更方便呢? 合成事件当中使用箭头函数比较方便 注意点在于当事件作为props传递给子组件时,会造成额外的性能损耗 个人简介 我是歌谣,欢迎和大家一起交 ...
- JS中的变量提升和函数提升
console.log(a); var a = 1 如上面代码中可以看出,由于JS是从上到下一行行的执行,因此很多人看到这一串代码的时候,会认为由于log之前没有定义a,因此会输出underfind, ...
- JS:ES6-4 简化对象与箭头函数
简化对象代码示例: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- js中变量名提升和函数名提升
首先,js中变量没有块级作用域,但是有函数作用域,即只有函数可以约数变量的作用域. 并且,函数的实质也是一个变量,所以可以改变它的值,即赋值.所以变量名提升和函数名提升非常相像. 1.变量名的提升发生 ...
- js中的变量提升和函数提升——精炼版
javaScript中用var定义变量时存在变量提升(ES6及之后的let/const定义变量时为块级作用域无变量提升,ES6之前js没有块级作用域),比如: console.log(a); // 不 ...
- JS中的setTimeout和setInterval函数
目录 前言 setTimeout setTimeout()函数应用之点名器 setInterval setInterval应用之重写点名器 前言 在生活中,常有定时做某事,或者循环做某事的需求,如设置 ...
- js中apply和Math.max()函数的问题?
2019独角兽企业重金招聘Python工程师标准>>> var arr=[1,3,6,3,7,9,2]; console.log(Math.max.apply(null,arr)); ...
- js中for循环调用回调函数,一直循环最后一个
js的for循环中使用回调函数,获取到的值总是最后一个值?_MLAY-CSDN博客_js 循环回调函数
最新文章
- 吴恩达:2020 年,这些 AI 大事件让我无法忘怀...
- ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
- window下安装nvm、node.js、npm的步骤
- log4j/slf4j
- 培训班出身的程序员怎么了
- java计算器用什么布局_求JAVA语言写的计算器的代码。用GridLayout布局。
- python 常用简单代码
- 初中数学抽象教学的案例_《数学核心素养“数学抽象”的实践案例研究》
- cesium——鼠标拾取坐标并转换为经纬高
- 25个酷炫的Matplotlib图表,附Python源码
- 日系P2P原理探究(一) — Winny元祖: Freenet
- 栈——后进先出的增删改查
- 导出微信聊天记录生成词云
- ddos应急处理_DDoS攻击应急体系知多少?
- 自动化功能测试平台TestComplete的分布式测试教程(一)
- 阿里巴巴的AI价值观,以及“ET大脑”战略
- 仿微信朋友圈图片上传
- 积分商城小程序定制开发
- SpringCLoud实战微服务之——微服务简介以及入门使用
- word文档如何在标题前面加上对应的层级数字编号