es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量
2016-10-11 14:49
555 查看
自己通过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结以下三点
1、var声明可以多次重复声明同一个变量,let不行
2、let变量只在块级作用域里面有效果,var 变量不存在块级作用域(块级作用域指用{}包装的代码块,个人理解)
3、let变量不会声明提前,var变量会
以下是具体例子
由于var声明的变量会声明提升var i 其实就是一个全局变量,console.log(i)里面的i也是全局变量,i在异步函数执行前已经变为了10
所以结果就连续输出了十个10
由于let声明了一个局部变量,console.log(i)里面的i是局部变量,每次循环时输出的都是一个局部变量,所以
结果就连续输出从0到9
输出的是全局变量,所以输出十个10
(function(i){console.log(i)})(i)将全局变量传入方法里,变成了一个局部变量,然后console.log(i)就是一个局部变量
所以结果是0到9;
方法里面可以把方法当做参数传入,这时的参数如果是在()里面定义的就是局部变量,在闭包里面有用;
参数a是一个函数,结果是11。
传递了一个匿名函数,结果也是11。
传递并声明了一个函数a; a是一个全局函数,结果也是11,此时的函数声明相当于在外面声明的。
报错在function的()里面的值是访问的外部的值,在这里面定义的是局部变量,不能够访问,会报错,所以这里不能声明变量。
也可以传递一个自执行函数
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); } }());
也可以传递一个自执行函数
相关文章推荐
- var与ES6中const、let声明的变量的区别
- [Wondgirl]ECMAScript6(ES6)(二)变量let、var和常量const的定义和区别
- javascript 全局变量 局部变量 var 与不加var的区别
- JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
- JS中VAR的用处(局部变量要用var来声明,全局变量不加var)
- ES5中的var与ES6中的let,const的区别
- js中用this,var,let 声明的变量的区别
- JS中的变量声明——var,let,const的区别
- for循环绑定事件时,var和let声明循环变量的区别
- 全局变量和局部变量的static声明的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C++ 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 全局变量、局部变量、静态全局变量、静态局部变量的区别
- 2010.4.8 全局的静态的变量和局部变量的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- 全局变量和局部变量在内存里的区别?
- 关于全局变量、静态全局变量、静态局部变量的区别与联系
- static全局变量,局部变量,函数与普通全局变量,局部变量和函数的区别
- C 发现个全局变量与局部变量的区别