es6中的let声明变量与es5中的var声明变量的区别,局部变量与全局变量

本身经过看typescript官方文档里的let声明,与阮一峰老师翻译的的es6学习文档,总结如下三点javascript

一、var声明能够屡次重复声明同一个变量,let不行java

二、let变量只在块级做用域里面有效果,var 变量不存在块级做用域(块级做用域指用{}包装的代码块,我的理解)es6

三、let变量不会声明提早,var变量会typescript

如下是具体例子闭包

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到9spa

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);
  }
}());

也能够传递一个自执行函数

相关文章
相关标签/搜索