let

let允许你声明一个作用域被限制在块级中的变量、语句或者表达式。

还是那个经典的问题:创建5个li,点击不同的li能够打印出当前li的序号。

如果在for循环中使用**var**来声明变量i的话,将总是打印出 Item 5 is Clicked

使用let的方式来解决

var liList = document.querySelectorAll('li') // 共5个li
for( let i=0; i<liList.length; i++){
 liList[i].onclick = function(){
   console.log(i)
}
}

而在MDN上是这样写的

var list = document.getElementById("list");

for (let i = 1; i <= 5; i++) {
 var item = document.createElement("LI");
 item.appendChild(document.createTextNode("Item " + i));

 let j = i;
 item.onclick = function (ev) {
   console.log("Item " + j + " is clicked.");
};
 list.appendChild(item);
}

所以,可以这样理解,在for( let i = 0; i< 5; i++) 这句话的圆括号之间,有一个隐藏的作用域。

var liList = document.querySelectorAll('li') // 共5个li
for( let i=0; i<liList.length; i++){
 let i = 隐藏作用域中的i // 看这里看这里看这里
 liList[i].onclick = function(){
   console.log(i)
}
}

而通过阅读以上的代码,我们可以理解为:JS默认为我们添加了 let i = 隐藏作用域中的i这行代码。

从而让我们可以直接在for循环中的{}获取到()中的变量i,进而解决使用var带来的一些弊端。

如果你还想对let有更深入的了解,可以看看这个。https://zhuanlan.zhihu.com/p/28140450

let x = x

关于let还有一个小问题

let x = x ,然后接下来就无法使用x变量了,无论是赋值,取值,还是声明,都不行。

x现在处于一种 既被定义了,又没被定义的 中间状态

如果你还想更深入了解这个问题,可以看看这个。https://www.zhihu.com/question/62966713

箭头函数

特点:

  • 由于 箭头函数没有自己的this指针,通过 call() apply() 方法调用一个函数时,只能传递参数,他们的第一个参数会被忽略。

  • 箭头函数不会创建自己的this,它只会从自己的作用域链的上一层继承this

  • 箭头函数不能用作构造器,和 new一起用会抛出错误。

  • 箭头函数没有prototype属性。

  • yield 关键字通常不能在箭头函数中使用(除非是嵌套在允许使用的函数内)。

箭头函数没有自己的this指针,如果在箭头函数中想要使用this,需要自己设置。

注意:使用Vue有时依赖this获取自身数据,但箭头函数没有自身this,会指向window。需要注意一下。

this指向问题

在调用函数每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this,指向的是一个对象。

这个对象我们称为函数执行的上下文对象

根据函数的调用方式不同,this会指向不同对象

  1. 以函数的形式调用时,this指向window

  2. 以方法的形式调用时,this指向调用方法的那个对象

  3. 以构造函数形式调用时,this就是新创建的那个对象

  4. shiyongcall和apply调用时,this是指定的那个对象

this是一个指针,永远指向其所在函数所有者,如果没有所有者,则指向全局变量window

let object = {
name: 'obj',
hi: function(this, p1, p2) {
console.log(this.name)
}
}
object.h1(1, 2)
object.h1.call(object, 1, 2)

上面的代码是用来帮助理解的,希望可以对你有所帮助。

ES6——>let,箭头函数,this指向小记的更多相关文章

  1. es6箭头函数 this 指向问题

    es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...

  2. ES6 箭头函数 this 指向

    ES6 箭头函数 this 指向 箭头函数有几个使用注意点: 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. 不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个 ...

  3. ES6 箭头函数this指向问题

    var name = "window"; var person1 = { name: "person1", show1: function() { consol ...

  4. ES6中箭头函数的作用

    我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...

  5. es6的箭头函数和es5的function函数区别

    一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...

  6. 箭头函数this指向问题

    this指向本质 箭头函数this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this ...

  7. Es6中箭头函数与普通函数的区别

    Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...

  8. 关于ES6 用箭头函数后的 this 指向问题

    最近写完小程序后, 开始学习React, 因为有编译器, 就直接用ES6 新语法了, 中间自然离不开  () => { console.log('箭头函数的this是指向哪的问题')}; var ...

  9. 进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题

    首先复习下普通函数里的this指向: function test(){ console.log(this) } test() 你会秒杀的毫无疑问的回答:window,针对普通函数:谁调用了函数  函数 ...

  10. ES6 箭头函数this指向

    箭头函数有几个使用注意点. (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误. (3)不可以使 ...

随机推荐

  1. 《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)

    1.简介 在实际工作中,我们需要对处理的元素进行高亮显示,或者有时候为了看清楚做跟踪鼠标点击了哪些元素需要标记出来.今天宏哥就在这里把这种测试场景讲解和分享一下. 2.用法 创建一个执行 JS 的对象 ...

  2. 监控框架 - prometheus

    1.关于Prometheus Prometheus是一个根据应用的metrics来进行监控的开源工具.相信很多工程都在使用它来进行监控,有关详细介绍可以查看官网:https://prometheus. ...

  3. 大爽Python入门教程 2-1 认识容器

    大爽Python入门公开课教案 点击查看教程总目录 1 什么是容器 先思考这样一个场景: 有五个学生,姓名分别为: Alan, Bruce, Carlos, David, Emma. 需要给他们都打一 ...

  4. Hadoop整体概述

    目录 前言 core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml 一.HDFS HDFS的设计理念 HDFS的缺点 1.NameNode ...

  5. CTF入门学习3->Web通信基础

    Web安全基础 01 Web通信 这个部分重点介绍浏览器与Web服务器的详细通信过程. 01-00 URL协议 只要上网访问服务器,就离不开URL. URL是什么? URL就是我们在浏览器里输入的站点 ...

  6. [bzoj1934]善意的投票

    最小割,考虑最小割就是要将整张图分为两块,本题中就分别表示赞同和不赞同,那么首先一开始赞同的点向S连边,不赞同的点向T连边,如果这些点分到了另一边就要割掉这条边,朋友关系同理,连双向边同样表示分到两边 ...

  7. 没有人比我更会使用集合!对, 是dart中的集合

    目录 简介 List的使用 Set的使用 Map的使用 常见的集合方法 总结 简介 dart中的集合有三个,分别是list,set和map.dart在dart:core包中提供了对于这三种集合非常有用 ...

  8. CF1550D Excellent Arrays

    考虑每个数一定是这个形式: \(i + x,i - x\) 所以如果我们要构造一个最大的数组. 那一定是这样的形式: 有一半为\(i + x\),有一半\(i - x\) 那么我们发现每个数有这样一个 ...

  9. 【机器学习与R语言】12- 如何评估模型的性能?

    目录 1.评估分类方法的性能 1.1 混淆矩阵 1.2 其他评价指标 1)Kappa统计量 2)灵敏度与特异性 3)精确度与回溯精确度 4)F度量 1.3 性能权衡可视化(ROC曲线) 2.评估未来的 ...

  10. mGWAS研究思路

    mGWAS(metabolome-based genome-wide association studies)的研究方法和GWAS类似,只是将代谢物含量作为表型性状来与基因位点进行关联.但同时它也有自 ...