7-22 es学习

2017-07-22  本文已影响0人  benbensheng

1.let命令

1-1. ++牢记重点++

let声明变量只在所在块级作用域起作用即{}

不存在变量提升即无声明提前

在let声明某个变量的前面,都属于这个变量的死区

let声明块状区域内不允许重复声明

1-2.++重点案列解释++

(1).{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

(2).for (let i = 0; i < 10; i++) {
// ...
}
console.log(i);
// ReferenceError: i is not defined

(3).var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a6; // 10

(4)var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a6; // 6

(5).for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc

(6).// var 的情况
console.log(foo); // 输出undefined
var foo = 2;
// let 的情况
console.log(bar); // 报错ReferenceError
let bar = 2;

if (true) {
// TDZ开始
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ结束
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}

typeof x; // ReferenceError
let x;
typeof undeclared_variable // "undefined"

// 报错
function () {
let a = 10;
var a = 1;
}
// 报错
function () {
let a = 10;
let a = 1;
}

function func(arg) {
let arg; // 报错
}
function func(arg) {
{
let arg; // 不报错
}
}


2.块级作用域

++2-1.为什么需要块级作用域?++

var tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefinedvar tmp = new Date();
function f() {
console.log(tmp);
if (false) {
var tmp = 'hello world';
}
}
f(); // undefined

var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5

++2-2.es5模仿块级作用域++

(function () {
var tmp = ...;
...
}());

++2-3. es6块级作用域++

{
let tmp = ...;
...
}

++2-4.块级作用域的弊端---无法取到里面的值++

{
let t = f();
t = t * t + 1;
}

let x = do {
let t = f();
t * t + 1;
};


3.const命令

++const声明一个只读的常量。一旦声明,常量的值就不能改变。++

(1)const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.

(2)var message = "Hello!";
let age = 25;
// 以下两行都会报错
const message = "Goodbye!";
const age = 30;


4.global对象


上一篇下一篇

猜你喜欢

热点阅读