zoukankan      html  css  js  c++  java
  • JavaScript:var、let、作用域

    在ES5中变量只有两个作用域:全局作用域和局部作用域(函数作用域),均用var定义。

    局部作用域(函数作用域):变量在函数内部生成,只能在函数内部调用。

    全局作用域:网页中所有脚本和函数均可使用

    ES6新增块级作用域:let 定义

      块级作用域:{}内

    下面例子中,在f()函数外部定义了全局变量tmp,在函数f()里定义了局部变量tmp。

    函数内的变量在函数调用的时候生成,在函数调用结束的时候销毁。此处使用了变量提升,即变量先使用,后定义。调用f(),打印的tmp值 为undefined。

    函数调用完后,再打印的tmp值应该为 全局变量 tmp的值 即 jjjj。

    1 var tmp ="jjjj";
    2 console.log("tmp1:"+tmp);
    3 function f() {
    4   console.log("tmp2:"+tmp);
    5   var tmp = 'hello world';//局部变量    
    6 }
    7 f();
    8 console.log("tmp3:"+tmp);

     去掉标黄色的,var。函数内部使用的是全局变量tmp。

    调用f(),打印的tmp值 为全局变量tmp的 jjjj。函数中将tmp的值 改为hello world ,

    函数调用完后,再打印的tmp值应该为 改变后的 hello world。

    再将函数里的tmp前加上let 。控制台会报错。因为let不存在变量提升,即let 不能先使用后定义。

     将上图f()函数内的两条语句交换位置。函数内部打印的是,内部改变的 hello world。函数结束后,仍然是 jjjj。 let只在块级作用域内有效。即{只在所在的花括号内有效},不局限于函数内部。可以在任何地方的花括号定义的块级作用域内。

  • 相关阅读:
    (*^_^*)Pose Estimation:DensePose
    (^_^)Pose Estimation:SamplePose
    [*v*/]人脸识别任务算法RetinaFace
    [*v*/]人脸识别任务算法MTCNN
    从Winograd算法看INT8量化及卷积加速原理
    [*_*/]Darknet && Mobilnet
    从TensorRT看INT8量化原理
    SSD算法精度
    信用评分卡模型的理论准备
    分类模型评估指标
  • 原文地址:https://www.cnblogs.com/weimengjiacan/p/13554830.html
Copyright © 2011-2022 走看看