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