IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ES6介绍+定义变量+不同情况下箭头函数的this指向 -> 正文阅读

[JavaScript知识库]ES6介绍+定义变量+不同情况下箭头函数的this指向

一、ES6介绍

1.概念

ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。

ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。

2.为什么用ES6

每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。

- 变量提升特性增加了程序运行时的不可预测性

- 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码

?二、ES6定义变量介绍

1. 新增let声明变量

????????let声明的变量只在所处于的块级有效。

????????块级作用域是指{}包围的区域,比如for、if。

? ? ? ? 解释:当let定义的变量在块级作用域时,可以在块级作用域里面输出,但在块级以外区域显示未定义

for(let i=1;i<10;i++){
    //console.log(i);
}
console.log(i);//未定义

结果显示如图

?2. 不存在变量提升

解释:

当用var定义时,以下代码可以执行,但是显示undefined(未定义),因为var定义变量实际路径执行如下:

var i;? ? ? ? ? ? ? ? //js的编码设置是用 var定义时,变量的定义实际是提到最前面的

console.log(i);         //此时i已经定义了,但是没有赋值,(代码由上到下执行)所以输出结果? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?undefined。

i = 1;????????? ? ? ? //最后执行
// 2:不存在变量提升
console.log(i);//undefined
var i=1;

结果如图

??

?2)当用let定义变量时,let不会提到最先面先定义变量,此时代码正常从上到下执行,先输出没有定义的变量一定报错

// 2:不存在变量提升
 console.log(i);//报错
let i=1;

结果如图

?3. "暂时性死区":用let声明的变量需要先声明后使用

解释:简单来说就是,不能颠倒声明和使用的顺序,下面的代码就是错的

if(true){
	i=2;        //先使用了
	let i=3;    //后声明的
}

4.?不允许重复声明

let a=1;
let a=3; //重复了 报错

?5. 块级作用域的案例举例

?1)当用var定义块级变量时,全部输出为3。因为var定义的是输出最后结果,程序要先走完for循环,然后再走回调函数,此时的i已经自增完了,i=3。所以全部调用输出都是3.

let arr = [];
			  
for(var i=0;i<3;i++){
	arr[i] = function(){
	    console.log(i);
	}
}
			  
arr[0]();
arr[1]();
arr[2]();

?

?2) 用let定义块级作用域变量,在程序执行时,for循环每一次的每一个let变量只对当时的作用域起作用,不能影响其他两个。所以回调函数的时候可以正确输出。

let arr = [];
			  
for(var i=0;i<3;i++){
	arr[i] = function(){
		console.log(i);
	    }
	}
			  
arr[0]();
arr[1]();
arr[2]();

?三、不同情况下箭头函数的this指向

(一)先介绍一下箭头函数

1.代码只有一句话的时候,有多个形参的时候可以省略掉{}和return。

2. 一个形参的时候可以省略形参外面的()

3. 没有形参的时候不能省略()

            //普通函数
			function sum1(a,b){
				return a+b;
			}
			sum(1,2);
			
			// 1:箭头函数的写法
			const sum2 = (a,b)=>{
				return a+b;
			}
			let res =  sum3(1,2);
			console.log(res);
			
			// 2: 箭头函数简写
			// 代码块只有一句话省略{}和return
			const sum4 = (a,b)=> a+b;
			res =  sum4(1,2);
			console.log(res);
			
			// 3:只有一个参数 小括号可以省略
			const sum5 = a => a+3;
			res =  sum5(1);
			console.log(res);

?(二)箭头函数this指向

定义:箭头函数的this是静态 根据上下文的this确定指向

不同位置的this普通函数中this指向箭头函数中this指向
全局windowswindows
对象里面函数实例windows
构造函数定义对象谁调用指向谁(实例)根据上下文this指向(实例)

1、全局

function Global(){
   console.log(this);
}
Global();

const global = ()=>{
    console.log(this);
}
global();

?2、对象里

const Person = {
    name:'张三',
    age:20,
    say:function(){
        console.log(this);
    }
}
Person.say();

const Person = {
    name: '李四',
    age: 10,
    say: ()=>{
        console.log('此时是李四',this);      //此时看上下文的this指向
    }
}
Person.say();
//我们知道对象的定义时这样的
let person = {};
person.name = '张三';
person.age = 23;
person.say = ()=> console.log('此时是张三',this);    //此时上下文的this全部是windows(或者理解为对象里面没有this,那就要找再外层的this就是windows)
console.log(person);
person.say();   //windows 

?3、构造函数定义对象

function Person(name,age){
    this.name = name;
    this.age = age;
    this.say = function(){
        console.log(this);
    }
}
let p1 = new Person('张三',24);
p1.say();

?

?

function Person(name,age){
    this.name = name;
    this.age = age;
    this.say = ()=>console.log(this);
}
let p2 = new Person('李四',45);
p2.say();

?

?注:有疑问可评论

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章           查看所有文章
加:2022-07-17 16:13:50  更:2022-07-17 16:18:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:46:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码