标签:
1 {
2 let a = 10;
3 var b = 1;}
4
5 a // ReferenceError: a is not defined.
6 b // 1
1 var a = [];for (var i = 0; i < 10; i++) {
2 a[i] = function () {
3 console.log(i);
4 };}
5 a[6](); // 10
6 a[6]的结果是最后一轮的i值,而使用let时a[6]的值则为6
7 var a = [];for (let i = 0; i < 10; i++) {
8 a[i] = function () {
9 console.log(i);
10 };}
11 a[6](); // 6
// 报错
function () {
let a = 10;
var a = 1;}
// 报错
function () {
let a = 10;
let a = 1;}
1 var tmp = new Date();
2
3 function f() {
4 console.log(tmp);
5 if (false) {
6 var tmp = "hello world";
7 }}
8
9 f(); // undefined
1 var s = ‘hello‘;
2
3 for (var i = 0; i < s.length; i++) {
4 console.log(s[i]);}
5
6 console.log(i); // 5
1 function f1() {
2 let n = 5;
3 if (true) {
4 let n = 10;
5 }
6 console.log(n); // 5
7 }
1 // IIFE写法
2 (function () {
3 var tmp = ...;
4 ...}());
5 // 块级作用域写法
6 {
7 let tmp = ...;
8 ...}
1 // 不报错
2 ‘use strict‘;if (true) {
3 function f() {}}
4 // 报错
5 ‘use strict‘;if (true)
6 function f() {}
1 const foo;
2 // SyntaxError: Missing initializer in const declaration
const的作用域与let命令相同,只在声明所在的块级作用域内有效。
1 const foo = {};
2 foo.prop = 123;
3
4 foo.prop
5 // 123
6
7 foo = {}; // TypeError: "foo" is read-only
8 如果想将对象冻结,应该使用Object.freeze方法
9
10 const foo = Object.freeze({});
11 // 常规模式时,下面一行不起作用;
12 // 严格模式时,该行会报错
13 foo.prop = 123;
除了将对象本身冻结,对象的属性也应该冻结。下面是一个将对象彻底冻结的函数。
1 var constantize = (obj) => {
2 Object.freeze(obj);
3 Object.keys(obj).forEach( (key, value) => {
4 if ( typeof obj[key] === ‘object‘ ) {
5 constantize( obj[key] );
6 }
7 });};
1 var a = 1;
2 // 如果在Node的REPL环境,可以写成global.a
3 // 或者采用通用方法,写成this.a
4 window.a // 1
5 let b = 1;
6 window.b // undefined
标签:
原文地址:http://www.cnblogs.com/wjlog/p/5693018.html