自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点

1、var声明可以多次重复声明同一个变量,let不行

2、let变量只在块级作用域里面有效果,var 变量不存在块级作用域(块级作用域指用{}包装的代码块,个人理解)

3、let变量不会声明提前,var变量会

以下是具体例子

for(var i=0;i<10;i++){
setTimeout(function(){console.log(i)},1000);
}

由于var声明的变量会声明提升var i 其实就是一个全局变量,console.log(i)里面的i也是全局变量,i在异步函数执行前已经变为了10

所以结果就连续输出了十个10

for(let i=0;i<10;i++){
setTimeout(function(){console.log(i)},i*1000);
}

由于let声明了一个局部变量,console.log(i)里面的i是局部变量,每次循环时输出的都是一个局部变量,所以

结果就连续输出从0到9

let i;
for(i=0;i<10;i++){
setTimeout(function(){console.log(i)},i*1000);
}

输出的是全局变量,所以输出十个10

for(var i=0;i<10;i++){
setTimeout((function(i){console.log(i)})(i),i*1000);
}

(function(i){console.log(i)})(i)将全局变量传入方法里,变成了一个局部变量,然后console.log(i)就是一个局部变量

所以结果是0到9;

方法里面可以把方法当做参数传入,这时的参数如果是在()里面定义的就是局部变量,在闭包里面有用;

var a = function(){
console.log(11);
}
var b = function(a){
a();
}
b(a);

参数a是一个函数,结果是11。

var b = function(a){
a();
}
b( function(){
console.log(11);
});

传递了一个匿名函数,结果也是11。

var b = function(a){
a();
}
b( function a(){
console.log(11);
}); a();

传递并声明了一个函数a; a是一个全局函数,结果也是11,此时的函数声明相当于在外面声明的。

var b = function(a){
a();
}
b( var a=function (){
console.log(11);
});

报错在function的()里面的值是访问的外部的值,在这里面定义的是局部变量,不能够访问,会报错,所以这里不能声明变量。

var b = function(a){
a();
}
b( a=function (){
console.log(11);
});
11var b = function (a) {
a();
}
b(function () {
return function () {
console.log(11);
}
}());

也可以传递一个自执行函数

es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量的更多相关文章

  1. js中三种定义变量的方式const, var, let的区别。

    const   var  let区别 1.const 定义的变量不可以修改,而且必须初始化 const a = 3;正确 const a;错误,必须初始化 console.log("函数外c ...

  2. 面试中的一些小问题之ES5和ES6的区别?

    1995年,JavaScript作为网景浏览器的一部分首次发布,起初并不叫JavaScript,而是叫LiveScript,但是因为当时Java正火,也算是为了搭上java的顺风车,于是改成了Java ...

  3. 关于Let和var声明变量的区别

    Let是ES6中添加进来的一个关键字,用于声明变量,其法与var声明变量相同,不同点在于其作用域(块级). 举例可以看出其具体差别 for(var i=0;i<5;i++){ console.l ...

  4. C# var声明变量解析

    C# var声明变量解析: 在C#3.0中提供了一种新的声明变量的方式,这就是var. 通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的.代码如下: var ss = ...

  5. js中三种定义变量 const, var, let 的区别

    js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...

  6. js中定义变量的三种方式const,val,let 的区别

    js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始 ...

  7. JS中const、var 和let的区别

    今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...

  8. ES6中的类继承和ES5中的继承模式详解

    1.ES5中的继承模式 我们先看ES5中的继承. 既然要实现继承,首先我们得要有一个父类. Animal.prototype.eat = function(food) { console.log(th ...

  9. es6的let与es5的var定义变量的区别

    es6的let与es5的var定义变量的区别 自身新手第一次接触let关键字的时候,不知道let与var的区别,本能认为是一样,但非如此,比如下述的代码运行就会报错: let hello = 'hel ...

随机推荐

  1. 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)

    这是 OpenStack 实施经验分享系列的第 1 篇. OpenStack 的 instance 是通过 Glance 镜像部署的,所以准备镜像是必须要做的工作.本节介绍 Linux 镜像的制作方法 ...

  2. 遍历hashMap对效率的影响

    测试环境:jdk1.7.0_79\Processor 1.7 GHz Intel Core i5 遍历Map的方式有很多,通常场景下我们需要的是遍历Map中的Key和Value. 写了两个方法: pu ...

  3. esri-leaflet入门教程(4)-加载各类图层

    esri-leaflet入门教程(4)-加载各类图层 by 李远祥 在leaflet中图层一般分为底图(Basemap)和叠加图层(Overlay).前面章节已经介绍过底图其实也是实现了TileLay ...

  4. masm32V11配置

    本文写给学汇编语言程序设计刚起步的吧友.适用Windows操作系统.已入门的吧友请绕道. (1)masm32开发包的下载 要用汇编语言编程,首先得有个开发工具,汇编语言开发工具有多种,但本文仅介绍ma ...

  5. 网站Web业务架构从小到大演变

    有一天,我突发奇想创建了一个站点,基于 LNMP 架构,起初只有我自己访问,后来因为我点儿正,访问量越来越大,所以最终导致下面的架构演变. 1.单台机器 单台机器因为只是一个小站,访问量一天也没有多少 ...

  6. canvas绘图不清晰的解决方案

    现象描述 同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多.结果如下图所示. 上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用ca ...

  7. C#的for循环使用方法

    for循环是程序语言开发中常见的技法之一,这类循环可以执行指定的次数,并维护它自己的计数器,要定义for循环,需要下述信息:1.初始化计数器变量的一个起始值;2.继续循环的条件,它应涉及到计数器变量; ...

  8. Android SDK教程

    Android SDK 网络问题解析 Android 客户端网络不稳定,会导致App 有时候无法及时收到 Push 消息. 很多开发者认为这是因为 JPush 推送不稳定.延迟,甚至有时候认为 JPu ...

  9. 使用docker-compose 大杀器来部署服务 上

    使用docker-compose 大杀器来部署服务 上 我们都听过或者用过 docker,然而使用方式却是仅仅用手动的方式,这样去操作 docker 还是很原始. 好吧,可能在小白的眼中噼里啪啦的对着 ...

  10. golang中的rpc包用法

    RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. 我所在公司的项目是采用基于Restful的微服务架构,随着微服 ...