一.练习题1
function fn() {
console.log(name);
console.log(age);
var name = 'Linda'
let age = 20
}
fn()
代码分析:
调用函数,用var声明的变量会存在变量提升的问题, 提升到当前函数的最前面,然后在打印,返回的结果是underfined。
使用let声明的变量不存在变量提升的问题,然后通过作用域链查找早外面进行查找,没有找到所有会报错。
无法在初始化之前访问“年龄”。
考点:
1.var声明的变量会存在变量提升的问题
2.还有一个就是作用域链,在当前作用域找不到就回在外层进行查找,找不到就会报错。
二.练习题2
function fn(data) {
if (data === {
age: 18
}) {
console.log(1)
} else if (data == {
age: 18
}) {
console.log(2);
} else {
console.log(3);
}
}
fn({age: 18})
解析:
传过的参数是一个对象,{age:18}。
对象属于引用的数据类型, 即,在栈里面存储指针,栈堆里面存贮数据。
后面比较的对象都是属于不同的地址。
那有人就要问了,==等号不是能转换吗?
转换不了,刚开始习已为常的以为能转换, 基本数据类型存在转换
所以答案是打印出3。
三.总结
为什么做这些题容易出错,还是知识点模糊,不够细心。