2020.12.4 07:35
ES6练习
1.var和let区别?
01块级作用域
02不能重复声明
03没有变量提升的概念
2.分析代码执行结果?
var a=123;
if(true){
a='zsh';
let a;
}
报错 a在未声明之前不能使用
分析:let会绑定作用域,并且没有变量提升,就是暂时性死区
3.补全代码
var person={
name:'zs',
age:12
}
let str=` `;
结果呈现:用户的姓名为 ,年龄是
result.innerHTML=str;
解答:
let str=`用户的姓名为${person.name},用户的年龄为${person.age}`;
4.将下面字符串改用模板字符串实现
$("#result").append(
"He is <b>"+person.name+"</b>"+"and we wish to
know his"+person.age+".That is all" );
解答:
$("#result").append(`
He&nbps;is
<b>${person.name}</b>
and&nbps;we&nbps;wish&nbps;to&nbps;know&nbps;his${person.age}.That&nbps;is&nbps;all
`);
5.下面程序输出的结果是?
let object = { first: 'Bill', lasts: 'Gates' };
let { first: firstName, last: lastName } = object;
p3.innerHTML=`${firstName+'\t'+lastName}`;
Bill undefined
分析:变量last和属性名lasts不同,取不到值所以是undefined
6.下列程序执行f()函数运行的结果是?
var tmp = new Date();
function f(){
console.log(tmp);
if(false){
var tmp = "hello world";
}
}
f();
输出结果:undefined
输出的tmp
在f
的作用域内,不受外界的tmp
影响,if语句的条件为false,不会执行,但是变量的作用域还是存在,也就是在f
的{}
中
相当于
var tmp = new Date();
function f(){
var tmp
console.log(tmp);
if(false){//false,不会执行
tmp = "hello world";
}
}
f();
定义了没赋值,undefined
在某一个作用域内,如果存在某一个变量,就会绑定该区域不再受外部影响
7.对比以下两道程序输出的值相同吗?
//A程序:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[8]();
a[9]();
//B程序
var b = [];
for (var i = 0; i < 10; i++) {
b[i] = function () {
console.log(i);
};
}
b[8]();
b[9]();
8,9,10,10
分析:
A用let声明i,i只在本轮生效,每次循环i都是一个新的变量
a[0]~a[9]里console(i)的i指向的是10个不同i
a[0]~a[9]里的i的值是0~9
B用var声明i,只有一个全局变量i,每次循环i的值都会改变
b[0]~b[9]里console(i)的i指向的都是同一个i,即全局变量i
调用时循环已结束,i的值为10,所以b[0]~b[9]里的i的都是10