let与const认识
es2015之前
在es2015之前JavaScript并没有块级作用域这个说法,只有全局和函数级的变量,let的出现使JavaScript语言有了块级作用域
在外面访问
{
var a=5;
let b=10;
}
console.log(a,b);//a=5 b=undefined
在里面访问
{
var a=5;
let b=10;
{
console.log(a,b);//a=5 b=12
}
}
泄密
for(var i=0; i<5; i++){};
console.log(i)//i=5 for(var i=0; i<5; i++){};
console.log(i)//i=undefined
提升
使用var声明的变量会提升,而使用let声明的变量不会提升
function f(){
console.log(a);
var a=5; /*等价于
var a;
console.log(a);
a=5;*/
}
f()//a=undefined function f(){
console.log(a);
let a=5;
}
f()//a is not defined
代替立即执行匿名函数
var config = (function(){
var config = [];
config.push(1);
config.push(2);
config.push(3);
return config;
})(); let config;
{
config = [];
config.push(1);
config.push(2);
config.push(3);
}
在严格模式(use strict)下运行函数不会被提升
function a(){console.log(1);}
function f(){
a();
if(false){
function a(){console.log(2)}
}
} //这段代码在非严格模式下运行会打印出2,在严格模式下运行会打印出1
- 实例例子
var arr= []; function f(){
for(var i=0; i<5; i++){
arr.push(function(){
console.log(i);
})
}
} f(); arr[3]()//
arr[4]()//
arr[1]()//
想要执行出想要的结果arr[x]()//x就必须用到let
var arr= []; function f(){
for(let i=0; i<5; i++){
arr.push(function(){
console.log(i);
})
}
} f(); arr[3]()//
arr[4]()//
arr[1]()//
在es2015之前您必须这样做
var arr= []; function f(){
for(var i=0; i<5; i++){
arr.push((function(i){
return function(){
console.log(i);
}
})(i))
}
} f(); arr[3]()//
arr[4]()//
arr[1]()//
let与const认识的更多相关文章
- openssl 1.1.1 reference
openssl 1.1.1 include/openssl aes.h: # define HEADER_AES_H aes.h: # define AES_ENCRYPT 1 aes.h: # de ...
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- C++中的const
一,C++中const的基本知识 1.C++中const的基本概念 1.const是定义常量的关键字,表示只读,不可以修改. 2.const在定义常量的时候必须要初始化,否则报错,因为常量无法修改,只 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- const let,console.log('a',a)跟console.log('a'+a)的区别
const 创建一个只读的常量 let块级作用域 const let重复赋值都会报错 console.log('a',a) a console.log('a'+a) a2 逗号的值会有空格:用加号的值 ...
- es6之let和const
在javascript中,我们都知道使用var来声明变量.javascript是函数级作用域,函数内可以访问函数外的变量,函数外不能访问函数内的变量. 函数级作用域会导致一些问题就是某些代码块内的变量 ...
- construction const parameter问题 构造函数const引用参数问题
工程在window下编译没有任何问题, 但是在linux(CentOS6)下编译就老是报错 C++ 编译器已升级到最新版 6.1.0 错误如下: In file included /bits/stl_ ...
- Error:const char* 类型的实参和LPCWSTR类型的形参不兼容的解决方法。
在C++的Windows 应用程序中经常碰到这种情况. 解决方法: 加入如下转换函数: LPCWSTR stringToLPCWSTR(std::string orig) { size_t origs ...
- C#基础知识七之const和readonly关键字
前言 不知道大家对const和readonly关键字两者的区别了解多少,如果你也不是很清楚的话,那就一起来探讨吧!探讨之前我们先来了解静态常量和动态常量. 静态常量 所谓静态常量就是在编译期间会对变量 ...
- const 与 readonly知多少
原文地址: http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html 尽管你写了很多年的C#的代码,但是可能当别人问到你cons ...
随机推荐
- UI自动化填写问卷(selenium)+定时任务(懒人必备)
1.自动填报 UI自动化 selenium 开发程序动机:天天有人催着填写问卷,弄的头大.主要还是懒的每天一个个去填写内容. 开发总时长:2个小时:学习+开发+修改 遇到的小问题: 在自动化填写地图的 ...
- Android Studio局部管理器
1.LinearLayout(线性布局) 该布局将其中的View子控件按照水平或者垂直方向排列.但是需要注意不管是水平还是竖直,对应的每一行或列都只能放一个控件. 线性布局两种排法: 从左到右:and ...
- 使用Python从PDF文件中提取数据
前言 数据是数据科学中任何分析的关键,大多数分析中最常用的数据集类型是存储在逗号分隔值(csv)表中的干净数据.然而,由于可移植文档格式(pdf)文件是最常用的文件格式之一,因此每个数据科学家都应该了 ...
- JavaScript String.prototype 原型
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...
- Oracle 存储过程 批量插入测试数据
有时候需要做DB的效率测试时,需要模拟大量数据.可以根据一条原始数据,通过执行存储过程拷贝出大量数据: CREATE OR REPLACE PROCEDURE proc_msw_strsql IS i ...
- 2020-07-21:简述redis主从同步的过程。
福哥答案2020-07-21: 1.从服务发送一个sync同步命令给主服务要求全量同步.2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成 ...
- C#设计模式之1-工厂方法模式
工厂方法模式(Factory Method Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/389 访问 ...
- Flutter 容器Container类和布局Layout类
1.布局和容器 [布局]是把[容器]按照不同的方式排列起来. Scaffold包含的主要部门:appBar,body,bottomNavigator 其中body可以是一个布局组件,也可以是一个容器组 ...
- 谈谈对volatile关键字的理解
1. volatile的特性 volatile是Java语言提供的一种轻量级的同步机制,用来确保将变量得更新操作通知到其它线程.具备三种特性: 保证变量的可见性: 对于volatile修饰的变量进行单 ...
- 【Codeforces】CF Round #592 (Div. 2) - 题解
Problem - A Tomorrow is a difficult day for Polycarp: he has to attend \(a\) lectures and \(b\) prac ...