zoukankan      html  css  js  c++  java
  • ES6初探,变量的声明

    JS中关于变量的声明、大家首先想到的肯定是var

    1 var mytest = "hello world"

    对于上面这样的声明相信大家已经见得太多了

    那么今天博主骑着自己的宝马自行车就为了早点分享带大家了解的就是ES6声明变量的几种新方式:

    1.let

    2.const

    那么今天我们先来说说第一种、let

    let声明变量、他的用法和var类似

    但是声明出来的变量只在它所在的块作用域有效

    1 {
    2     var test1 = "hello world";
    3     let test2 = "hello world";
    4 }
    5 console.log(test1);//hello world
    6 console.log(test2);//Uncaught ReferenceError: test2 is not defined

    上面声明的两个变量是用var 和 let

    可以看出let声明的变量只在块作用域中起了效果、出了作用域就找不到let声明的变量了

    再来看一段代码

    1 for (var i = 0; i < 10; i++) {}
    2 console.log(i);//10
    3 
    4 for (let j= 0;j < 10;j++) {}
    5 console.log(j);//Uncaught ReferenceError: j is not defined

    用var生成的变量会依然存在的、但是用let声明的变量作用域之外是找不到的

    也就是说明let只会在自己的代码块作用域内有效、

    有时候我们如果用var声明变量会无意之间占用一些内存,损耗性能

     

    再说到“变量提升”的问题(我理解这个词就认为他归到闭包的一类问题)

    1 console.log(mytest1); // undefined
    2 console.log(mytest2); // Uncaught ReferenceError: bar is not defined
    3 
    4 var mytest1 = 2;
    5 let mytest2 = 2;

    undefined和not defined 的区别大家都还清楚吗?

    没清楚也没关系、我在这里再为大家解释一下

    undefined是察觉有这个变量但是还没有赋值(因为我们的赋值语句在打印的下方)

    not defined 是察觉压根都没有定义这个变量

    所以let并不会发生"变量提升"

    好了到这里先吃个明星虾

     

    let还有这样一个特性:暂时性死区

    1 var temp = 123;
    2 
    3 if (true) {
    4   temp = 'abc'; // Uncaught ReferenceError: temp is not defined
    5   let temp;
    6 }

    ES6明确规定,如果区块中存在letconst命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。

    如果我们看到了这一特性、发现如果这样的话、typeof也是会报错的

    1 typeof x; //Uncaught ReferenceError: x not defined
    2 let x;

    还有let的最后一个特性

    let不允许在相同作用域内,重复声明同一个变量。

    1 var b =4;
    2 var b= 5;
    3 console.log(b);//5
    4 
    5 let a =4;
    6 let a= 5;
    7 console.log(a);//Uncaught SyntaxError: Identifier 'a' has already been declared

    好了,对于let的一些特性和用法就先说这么多、老板又催我干活啦

  • 相关阅读:
    某个牛人做WINDOWS系统文件详解
    常用ASP脚本程序集锦
    LINUX基础:文件安全与权限
    proftpd+mysql+quota
    apache2.0.49tomcat5.0.19jk2建立virtualHost
    URL Redirection(转) Anny
    顶级域名后缀列表(转) Anny
    \u4E00\u9FA5意义 Anny
    How to POST Form Data Using Ruby(转) Anny
    How to get rid of 'Enter password to unlock your login keyring' in Ubuntu(转) Anny
  • 原文地址:https://www.cnblogs.com/webxiaojian/p/5580436.html
Copyright © 2011-2022 走看看