es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量
自己通过看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声明变量的区别,局部变量与全局变量的更多相关文章
- js中三种定义变量的方式const, var, let的区别。
const var let区别 1.const 定义的变量不可以修改,而且必须初始化 const a = 3;正确 const a;错误,必须初始化 console.log("函数外c ...
- 面试中的一些小问题之ES5和ES6的区别?
1995年,JavaScript作为网景浏览器的一部分首次发布,起初并不叫JavaScript,而是叫LiveScript,但是因为当时Java正火,也算是为了搭上java的顺风车,于是改成了Java ...
- 关于Let和var声明变量的区别
Let是ES6中添加进来的一个关键字,用于声明变量,其法与var声明变量相同,不同点在于其作用域(块级). 举例可以看出其具体差别 for(var i=0;i<5;i++){ console.l ...
- C# var声明变量解析
C# var声明变量解析: 在C#3.0中提供了一种新的声明变量的方式,这就是var. 通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的.代码如下: var ss = ...
- js中三种定义变量 const, var, let 的区别
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 ...
- js中定义变量的三种方式const,val,let 的区别
js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始 ...
- JS中const、var 和let的区别
今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始化. 1 ...
- ES6中的类继承和ES5中的继承模式详解
1.ES5中的继承模式 我们先看ES5中的继承. 既然要实现继承,首先我们得要有一个父类. Animal.prototype.eat = function(food) { console.log(th ...
- es6的let与es5的var定义变量的区别
es6的let与es5的var定义变量的区别 自身新手第一次接触let关键字的时候,不知道let与var的区别,本能认为是一样,但非如此,比如下述的代码运行就会报错: let hello = 'hel ...
随机推荐
- CentOS 6.4 升级python 2.6.6 到 python 2.7.9
1. 查看当前系统python的版本 python -V 2. 下载python软件包 cd /usr/local/src wget http://python.org/ftp/python/2.7. ...
- Ioc容器BeanPostProcessor-Spring 源码系列(3)
Ioc容器BeanPostProcessor-Spring 源码系列(3) 目录: Ioc容器beanDefinition-Spring 源码(1) Ioc容器依赖注入-Spring 源码(2) Io ...
- Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
描述: 给出一个单词,在单词中插入若干字符使其为回文串,求回文串的个数(|s|<=200,n<=10^9) 这道题超神奇,不可多得的一道好题 首先可以搞出一个dp[l][r][i]表示回文 ...
- memcached学习总结
一.介绍1.基于libevent的事件处理 libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理.包装 ...
- Apache2.2以上版本与Tomcat整合配置及负载均衡实现
apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp,很方便. 修改apache配置文件httpd.conf 启用mod_proxy_ajp #LoadModule pr ...
- 每天一个Linux命令(16)--which命令
把昨天的,留给昨天:今日,你将重新开始. 好的,在第一个阶段我们学习了 文件目录的操作命令: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ls cd pwd mkdir ...
- 面对考试毫无畏惧的SSH
[Struts+Spring+Hibernate] 新建一个项目 把SSH jar包(包含mysql.oracle.jackson等包在里面) 把web.xml复制到WebContent\WEB-IN ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1
来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...
- 1610: [Usaco2008 Feb]Line连线游戏
1610: [Usaco2008 Feb]Line连线游戏 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1396 Solved: 615 [Subm ...
- Codevs2776 寻找代表元
2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号 ...