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只在块级作用域内有效。即{只在所在的花括号内有效},不局限于函数内部。可以在任何地方的花括号定义的块级作用域内。

  • 相关阅读:
    linux系统中不同颜色的文件夹及根目录介绍
    linux命令学习 随笔
    Happiness
    Sequence Number
    base64加密解密c++代码
    Wooden Sticks
    出租车费
    关系推断
    如何在Ubuntu中安装中文输入法
    c语言中printf("%x",-1);为什么会输出-1的十六进制补码??
  • 原文地址:https://www.cnblogs.com/weimengjiacan/p/13554830.html
Copyright © 2011-2022 走看看