1、var和let区别?
Var和let都是声明变量的作用。但是是有区别的,var的声明是在全局变量的声明,let的声明也是let块级作用域:{就是代码块}向上寻找距离该变量最近的开始的{ 作用范围就是该{}之内。
Let没有变量提升的概念;
let有暂时性死区:在一个代码块内,如果有某个变量,会绑定该区域,不再受外界的影响
2、分析代码执行结果?
var a=123;
if(true){
a=‘zsh’;
let a;
}
答:代码会报错
Var a 是在全局变量上进行声明的,因此if判断语句是可以使用var a=123 这个赋值的变量的,在if判断语句内,由于let没有变量提升,所以按照顺序执行代码,a=”zsh”,到了let a由于这个a已经被声明过了let不支持重复声明,所以会报错。
3、补全代码
var person={
name:‘zs’,
age:12
}
let str=;
结果呈现:用户的姓名为 ,年龄是
result.innerHTML=str;
答:用户的姓名为${person.name},年龄是${person.age}
4、将下面字符串改用模板字符串实现?
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲result").append…("#result").append(
He is <b>${person.name}</b> and we wish to know his ${person.age}.That is all
)
5、下面程序输出的结果是?
let object = { first: ‘Bill’, lasts: ‘Gates’ };
let { first: firstName, last: lastName } = object;
console.log(firstName+’\t’+lastName);
答:Bill undefined
6、下列程序执行f()函数运行的结果是?
var tmp = new Date();
function f(){
console.log(tmp);
if (false){
var tmp = “hello world”;
}
}
f()
Undefined,
在if语句中var声明的tmp也受到变量提升的影响但是由于if判断语句是false,不执行赋值’hello,world’
7、对比以下两道程序输出的值相同吗?
//A程序:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a8; //8
a9; //9
变量i是let声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是8,9。
//B程序
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a8; //10
a9; //10
变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10