美文网首页
ES基础语法补充(let)二刷 ,每刷一次就有新的理解

ES基础语法补充(let)二刷 ,每刷一次就有新的理解

作者: 吴高亮 | 来源:发表于2018-12-19 21:24 被阅读0次

首先就是let只在定义的区块中有效;在区块以外无效;同样let无声明提升;
{
let a=0;
var b=1;
};
console.log(a);//报错;
console.log(b);1;
for循环最适合使用let;
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a6; // 10
代码从上到下执行;var i;相当于全局就一个i;代码从上到下执行;最终执行完成后i就是10;
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a6; // 6
上面代码中,变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc
for后面的()是一个作用域;内部循环是一个作用域;
上面代码正确运行,输出了 3 次abc。这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。

  • 不存在变量提升;也就是会出现暂时性死区;不允许全局定义;在函数的内部的默认的方法;存在

为什么需要块级作用域;

首先内部变量会覆盖外部变量;
var tmp=new Date();
function f(){
console.log(tmp);
if(false){
var tmp='hello world';
}
};
f();//undefined;
因为var 存在变量提升;导致内层的变量tmp被从新定义;一个{};就是一个区块;也就是块级作用域;
let实际上为JavaScript增加了块级作用域;
块级作用域的出现,实际上使得获得广泛应用的立即执行函数表达式(IIFE)不再必要了。

相关文章

  • ES基础语法补充(let)二刷 ,每刷一次就有新的理解

    首先就是let只在定义的区块中有效;在区块以外无效;同样let无声明提升;{let a=0;var b=1;};c...

  • 2017-07-11

    ES6基础语法 基础用法 let 用来声明变量 它的用法类似于var,但是所声明的变量,只在let命令所在...

  • ES6 实用新增特性总结

    以下内容是我在学习ES6的语法时整理的一些比较常用的新特性。 let和const let可以理解为var的替代版本...

  • Vue:01.简单使用

    ESMAScript(ES6语法简单补充) 1、let和const var声明的变量会暴露在全局作用域中,可以不断...

  • 面试

    ES6常用新特性和语法。 一、变量申明 ES6有var、function、let、const、import、cla...

  • 学习webpack记录

    现在在用JavaScript练习算法题,用到大量ES6语法特性,在补充ES6语言基础的同时,实在觉得nodejs内...

  • 初中学习方法

    语文 背记知识点 数学 学好基础刷题 英语 记住语法 语法对应练习 政史地生 背记好 物理化学 重在理解

  • es6基础语法-let

    es6里新增加了let和const语法 1.let用来声明变量,用法和var类似,但是let声明的变量,只能在他的...

  • 4.es基本用法

    一.es基础语法 1.索引curl 索引理解:可以理解成mysql的库,但是es中是没有库这个概念的 es是支持r...

  • ES6详解1

    es6语法 es6新增命令 let let 类似于 var 用来声明变量 ,let 命令所在的 代码块内才生效{l...

网友评论

      本文标题:ES基础语法补充(let)二刷 ,每刷一次就有新的理解

      本文链接:https://www.haomeiwen.com/subject/jtsskqtx.html