zoukankan      html  css  js  c++  java
  • 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);
      }
    }());
    

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

    学而不思则罔,思而不结则殆,结而不看,一事无成
  • 相关阅读:
    ASP.NET Core 中的管道机制
    常见的 HttpModule
    IIS+Asp.Net Mvc必须知道的事(解决启动/重启/自动回收站点后第一次访问慢问题)
    ASP.NET三剑客 HttpApplication HttpModule HttpHandler 解析
    Js国际化
    MethodImplOptions
    Java守护线程普通线程的例子
    Java启动新线程的几种方式(Runnable、Callable、CompletableFuture)
    Tomcat源码分析(3)-容器Container整体架构
    Tomcat源码分析(2)-连接器Connector整体架构
  • 原文地址:https://www.cnblogs.com/windseek/p/5949241.html
Copyright © 2011-2022 走看看