《ES6入门(第二版)》学习笔记【精华】(2)- 变量声明

来源:互联网 发布:阿尔法拆单软件 编辑:程序博客网 时间:2024/05/16 04:38

0.1 ECMAScript 6 简介

  • ES6 是 JS 语言的下一代标准,目标是使 JS 可以编写复杂的大型应用程序
  • ES6 是 JS 的规范,JS 是 ES6 的实现,两者在一般场合可以互换

0.2 SLT3 NodeJS 环境配置运行 ES6

方便写作及阅读起见,Sublime Text 3 以下简称: slt3

0.2.1 环境说明

  • 作为完美的编辑器或者轻量级编译器,slt3 很棒。他的插件机制,是它本身几乎可以不受限制的扩展功能,常见如代码高亮、美化/格式化,新增编译系统,调用命令行等都不在话下,且这些功能均可以进行 User Setting 操作。

    本人使用的是免费版本,百度能搜到,这里不提供slt3下载链接。

0.2.2 插件安装 / nodejs

  1. 安装好slt3之后,下载nodejs插件,zip 格式就行。

  2. 将下载文件解压至下目录,命名为NodeJS:

image_1bfgtga6su3h3h1eah1ilg13ei13.png-74.5kB

  1. ctrl+shift+p 安装NodeJS插件(如果不进行1、2步安装会找不到配置文件),如下图:

image_1bfgtl35vni17qh16ss1tq91a4q1g.png-10.8kB

  1. 打开步骤3中的 NodeJS/Nodejs.sublime-build 文件,修改encodingwindow为如下内容:

image_1bfgtqst1ts7ncmmqm1n5j1o091t.png-11.8kB

  1. 建立一个 test.js ,写下代码:
var http=require('http');  var server=http.createServer(function(request,response){      response.writeHead(200,{ContentType:'text/plain'});      response.write('hello');      response.end('world');  });  server.listen(8888);  console.log('Server running at http://127.0.0.1:8888/');
  1. ctrl+b 或者 alr+r 运行该文件,再 console 下看到信息:

image_1bfgu21td1au6m811ctgrgrabn2a.png-5.2kB

打开浏览器,转到 http://127.0.0.1:8888 ,有helloworld则成功:

image_1bfgu4ddm1q3t11uh1ge31vsk1hak2n.png-5kB

1. let const 指令

1.1 let 指令

  • let 指令的声明,只在对应的块级作用域下有效

ES6 允许任意块级作用域嵌套

    {{        {{            let good = 1;            {                let good = 1;                function() {                    good = 'fork';                }            }        }}    }}    块级作用域的出现取代了 IIFE (Imediatly Invoked Function Expression)    (function(){        var ha = 1;    })()    ha; // undefined    推荐使用函数表达式,而不是函数声明语句    // 函数表达式    {        let a = 1;        let f = function() {            let 1 = 2;        }    }    // 函数声明    {        let a = 1;        function f() {        };    }

匹配类似循环变量的使用场景;

for (let i=0; i<10; i++) {    // do_something...}
  • let 指令不存在变量提升现象

  • 暂时性死区 ( Temporal Dead Zone ):当块状代码域中如果存在 let 指令,那么此变量将绑定这个作用域。在变量声明前,对该变量进行的操作会导致错误,也包括 TypeOf 函数

    typeof x;   // ReferenceError    let x;      //     typeof undefined_var;   // undefined

变量提升可能带来问题:
1. 循环变量泄露
2. 内层变量覆盖外层变量 如下展示

    var tem = 'Hello';    function f() {        console.lop('jsp');        if (false) {            var tem = "World";        }    }    等同于 ==>    var tem = 'hello';    function f() {        var tem;        console.lop('jsp');        if (false) tem = 'world';    }    f(); // undefined

1.2 const 指令

  • const 存在暂时性死区问题

  • 对于符合类型的数据,const 变量名不指向数据,而是指向数据的地址:

const foo = {}foo.prop = 123;;foo.prop; // 123foo.error; // error foo is read-only冻结对象应该使用Object.freeze方法const foo = Object.freeze({});foo.prop = 123; // useless in normal mode && error in strict mode 彻底冻结对象可以使用自定义方法var freezeAll = (obj) => {    Object.freeze(obj);    Object.keys(obj).forEach( (key, value) => {        if ( typeof obj[key] === 'object' ) {            freezeAll (obj[key]);        }    })}

1.3 全局对象

  • 浏览器中指 window 对象,NodeJS 指 global 对象。
window.a = 1;a = 2;window.a // 2
0 0
原创粉丝点击