1.简述var 和let 区别是什么?
答:
(1)使用var命令声明会发生变量提升,使用let不会发生变量提升;
(2)使用let命令来声明变量,用法类似于var变量,但只在let命令所在的代码块内有效;
作用域不同,var是全局作用域,let是块级作用域;
(3)var属于ES5规范,let属于ES6规范
2.下面程序执行结果是?
var a= 123;
if (true) {
a= ‘abc’; // ReferenceError
let a;
}
初始化之前无法访问a,主要是因为let无法发生变量提升,所以执行结果为ReferenceError。
1.ES6中常用解构赋值有哪几种?
答:共4种,分别为:数组解构赋值,对象解构赋值,字符串解构赋值,函数参数的解构赋值。
2.下面程序执行结果是?
let { x,y} = { foo: “aaa”, bar: “bbb” };
console.log(x);// undefined
答:对象解构中的对象只能按照属性来进行解构,x,y属性和foo,bar属性不符,没有赋值,所以执行结果为undefined;
课后作业1
1.将下面字符串改用模板字符串实现?
…
$("#result").append(
“He is “+person.name+””+“and we wish to
know his”+person.age+".That is all" );
…
课后作业2.下面程序输出的结果是:
let object = { first: ’
astName } = object;
console.log(firstName+’\t’+lastName);
A. Bill Gates
B. Bill undefined
C. Bill null
D. Uncaught ReferenceError
因为赋值语句第一句是lasts,而下面那句是last所以lasts上的值并没有赋值给last上,所以为Bill和undefined,所以选B
课后作业3.下列程序执行f()函数运行的结果是?
var tmp = new Date();
function f(){
console.log(tmp);
if (false){
var tmp = “hello world”;
}
}
f()
A. 当前系统时间
B. hello world
C. undefined
D. 程序报错
因为没有Date方法,所以返回的tmp是undefined,所以选C
课后作业拓展1
对比以下两道程序输出的值相同吗?
//A程序:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a8;
a9;
//B程序
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a8;
a9;
答:这道题考察let和var声明的区别,let声明后变量的值不再改变,所以输出8,9;var声明后,i经过for判断成立后,i++还要循环for,直到i值大于或等于10,输出。A程序输出值为8,9;B程序输出值为10,10,两道程序输出值不同。
课后作业拓展2
下面程序的执行结果是什么?请分析原因?
function f({ x = 10 } = {}, { y } = { y: 10 }) {
console.log( x + " " + y +"\n");
}
f(); // 10 10
f( undefined, undefined ); // 10 10
f( {}, undefined ); // 10 10
f( {}, {} ); // 10 undefined
f( undefined, {} ); // 10 undefined
f( { x: 2 }, { y: 3 } ); // 2 3