第一章 ES6初步
1.简述var 和let 区别是什么?
| var | let | const | class |
变量提升 | 声明提升,赋值不提升 | 不提升(报错Cannot access 'm' before initialization) | 不提升 | |
作用域 | 函数作用域(寻找距离最近的函数的左大括号) | 块级作用域(寻找最近的左大括号) | | |
重复声明 | 可以 | 不可以(报错identifier 'a' has already been declared) | 不可以 | |
暂时性死区 | 不会 | 会(原因:1、全局变量和局部变量同时存在,局部变量优先。2、没有变量提升) | | |
语法 | ES5 | ES6 | | |
重新赋值 | 可以 | 可以 | 不可以 | |
| | | | |
2.下面程序执行结果是?
var a= 123;
if (true) {
a= 'abc'; // ReferenceError
let a;
}
结果:Cannot access 'a' before initialization
原因:a属于局部变量,let无法提升变量声明,故a变量赋值了,却还没有声明。
3.ES6中常用解构赋值有哪几种?
ES6的常用解构:数组解构、对象解构、字符串解构
数组解构:数组元素依次赋值给变量;
let[a,b,c,d]=[1,2,3,4];
console.log(a,b,c,d);
对象解构:和数组解构不一样,数组是有顺序的。对象只能按照属性来进行解构;
let{name,age}={
name:'zs',
age:12
}
console.log(name,age)
字符串解构:和数组解构类似;
let [x1,y1,z1]='hello';
console.log(x1,y1,z1);//输出 h e l
4.下面程序执行结果是?
let {x,y} = { foo: "aaa", bar: "bbb" };
console.log(x);// undefined
结果:undefined;
原因:x和y 的声明了,却没有赋值;
5.补充下面程序代码
var person={
name:'zhangsan',
age:10
};
let str=` `; //使用模板字符串补全程序
ElementById('result').innerHTML=str;
补充的代码:${person.name}
${person.age}
6.将下面字符串改用模板字符串实现?
......
$("#result").append(
"He is <b>"+person.name+"</b>"+"and we wish to
know his"+person.age+".That is all" );
......
使用模板字符串:
......
$("#result").append(`
He is <b>${person.name}</b>and we wish to
know his${person.age}.That is all
`);
......
7.下面程序输出的结果是:B (原因:前后的 last 的拼写不一致,属于声明了,没有赋值)
let object = { first: 'Bill', lasts: 'Gates' };
let { first: firstName, last: lastName } = object;
console.log(firstName+'\t'+lastName);
A. Bill Gates
B. Bill undefined
C. Bill null
D. Uncaught ReferenceError
8.下列程序执行f()函数运行的结果是?C
var tmp = new Date();
function f(){
console.log(tmp);
if (fal){
var tmp = "hello world";
}
}
f()
A. 当前系统时间
B. hello world
C. undefined
D. 程序报错
(原因:tmp属于局部变量,var声明提升,赋值不提升)(!变量的作用域跟if(fal)没有关系)
function add(){
if(true){
a=10;
}
}
function app(){
if(fal){
b=10;
}
}
add();
app();
console.log(a);
console.log(b);
9.对比以下两道程序输出的值相同吗?不相同
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[8]();
a[9]();
结果:8,9
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[8]();
a[9]();
结果:10 ,10
(原因:let是块级作用域,var是全局作用域,使用var只能获取循环的最后一个值)
10.下面程序的执行结果是什么?请分析原因?
function f({ x = 10 } = {}, { y } = { y: 10 }) {
console.log( x + " " + y +"\n");
}
f();
f( undefined, undefined );
f( {}, undefined );
f( {}, {} );