第一章 ES6初步
1.简述var 和let 区别是什么?
var
const的作用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 (false){
        var tmp = "hello world";
      }
}
f()
A. 当前系统时间
B. hello world
C. undefined
D. 程序报错
(原因:tmp属于局部变量,var声明提升,赋值不提升)(!变量的作用域跟if(false)没有关系)
//特殊情况
//未声明的变量,直接赋值。作用域是从该变量赋值以后就可以使用。
function add(){
    if(true){
        a=10;
    }
}
function app(){
    if(false){
        b=10;
    }
}
add();
app();
console.log(a); //输出10
console.log(b);//输出b is not a defined
9.对比以下两道程序输出的值相同吗?不相同
//A程序:
    var a = [];
    for (let i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[8]();
    a[9]();
结果:8,9
//B程序
    var a = [];
    for (var i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[8]();
    a[9]();
结果:1010
(原因:let是块级作用域,var是全局作用域,使用var只能获取循环的最后一个值)
10.下面程序的执行结果是什么?请分析原因?
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 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。