1, var 和let的区别
var是es5中的声明语法
在声明变量的时候,会先把变量提升到作用域的最顶部,赋值留在本地,变量在当前作用域里面都是可以使用的,在没赋值之前是空的。赋值之后可以重新赋值,灵活性极高,容易变量污染。
let是es6新增语法
let是块级作用域,以一大括号为一个块级作用域,一个作用域中同一变量只能声明一次,不可重复声明。且该块级作用域内以申明的变量不受外界影;
let声明没有变量提升,在let声明之前是不可以使用的,会报错,显示,未初始化。
2、分析代码执行结果?
var a=123;
if(true){
a='zsh';
let a;
}
执行之后,a就会报错,let 声明的是一个块级作用域,声明之后,就不会受外界的影响,此时大括号里面的a就是let声明的a,let没有变量提升,在声明之前是不能使用的
3.3、补全代码
原代码
var person={
name:'zs',
age:12
}
let str=` `;
结果呈现:用户的姓名为 ,年龄是
result.innerHTML=str;
更改后
var person={
name:'zs',
age:12
}
let str=`用户的姓名为${person.name},年龄是${person.age} `;
//结果呈现:用户的姓名为 ,年龄是
console.log(str);
4、将下面字符串改用模板字符串实现?
$("#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` )
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,var声明变量,会把变量提升到作用域的最顶部,赋值留在本地,局部作用域使用变量会在当前作用域寻找,如果没有才会去上级作用域寻找,本题 f() 函数里面又重新var 了一个tmp,所以不会使用全局的tmp。
对比以下两道程序输出的值相同吗?
//A程序:
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[8]();
a[9]();
//B程序
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[8]();
a[9]();
输出值是不一样的,A程序,let声明的是一个块级作用域,函数a里面打印的i和索引里面的i是相同的。输出的是 9,10。B程序a函数会在for循环之后执行,输出结果 10,10.