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

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

    学而不思则罔,思而不结则殆,结而不看,一事无成
  • 相关阅读:
    关闭 Window 之后,无法设置 Visibility,也无法调用 Show、ShowDialogor 或 WindowInteropHelper.EnsureHandle。
    WPF中的逻辑树和可视化树
    StopWatch
    【转】Oracle imp 总是不停地重复闪烁
    Ubuntu下借助URLOS实现快速安装DzzOffice企业办公套件
    linux下使用URLOS搭建nextcloud私有云盘系统
    在Debian下利用URLOS快速安装SqlServer2017
    使用URLOS 五分钟安装rTorrent (轻量级优秀BT/PT客户端)
    URLOS开发基础教程——docker容器的使用方法
    使用URLOS在linux系统中极速部署NFS共享存储服务
  • 原文地址:https://www.cnblogs.com/windseek/p/5949241.html
Copyright © 2011-2022 走看看