《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
安装好slt3之后,下载nodejs插件,
zip
格式就行。将下载文件解压至下目录,命名为NodeJS:
ctrl
+shift
+p
安装NodeJS插件(如果不进行1、2步安装会找不到配置文件),如下图:
- 打开步骤3中的 NodeJS/Nodejs.sublime-build 文件,修改
encoding
和window
为如下内容:
- 建立一个
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/');
ctrl
+b
或者alr
+r
运行该文件,再 console 下看到信息:
打开浏览器,转到 http://127.0.0.1:8888 ,有helloworld则成功:
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
- 《ES6入门(第二版)》学习笔记【精华】(2)- 变量声明
- 《ES6入门(第二版)》学习笔记【精华】(2)-变量的解构赋值
- Fortran学习笔记2(变量声明)
- 变量声明-TS学习笔记(2)
- ES6标准入门(第二版)pdf
- ES6入门学习笔记
- ES6学习笔记(二)变量的解构赋值
- ES6入门笔记(一)
- MFC Window程序设计(第二版)精华浓缩笔记(二)
- MFC Window程序设计(第二版)精华浓缩笔记(三)
- MFC Window程序设计(第二版)精华浓缩笔记(二)
- MFC Window程序设计(第二版)精华浓缩笔记(三)
- MFC Window程序设计(第二版)精华浓缩笔记(二)
- 【ES6】声明(declare)
- ES6的变量声明
- ES6-let变量声明
- ES6的变量声明
- ES6的声明变量
- 最小费用最大流模板
- Linux虚拟机的网络配置和系统配置
- 单调队列
- 练习题 No.21 邻接表
- 使用单例模式实现自己的HttpClient工具类
- 《ES6入门(第二版)》学习笔记【精华】(2)- 变量声明
- java 设计模式之模板方法模式
- 实例1:屏蔽鼠标右键
- 【Java】知乎:学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?
- WanaCrypt0r 2.0 病毒
- 观察者模式
- HttpClient request payload post请求
- 汇编程序:查表求平方
- 蓝桥杯训练题:爆搜——海盗喝酒