题目1
题
var getName = function() {
console.log(4);
};
function getName() {
console.log(5);
}
getName() // 4
解
由于 js 中的变量提升,影响了代码的执行顺序
- 执行
var getName
,声明变量 getName,给默认值 undefined - 执行
function getName(){console.log(5)}
声明并初始化函数 - 执行
getName = function(){console.log(4)}
对步骤 1 中声明的变量进行赋值
上面代码可转为下面的样子
var getName
function getName() {
console.log(5)
}
getName = function() {
console.log(4)
}
题目2
题
function t1(age) {
console.log('1', age);
var age = 27;
console.log('2', age);
function age() {}
console.log('3', age);
}
t1(3);
// 1 ƒ age() {}
// 2 27
// 3 27
解
- 传入 age 为 3
- 执行
var age
,声明变量 age,age 已传入 3,所以默认值是 3 - 执行
function age() {}
,声明并初始化函数 - 执行第一个打印语句
console.log('1', age)
- 执行赋值
age = 27
- 执行第二个打印语句
console.log('2', age)
- 执行第三个打印语句
console.log('3', age)
参考
《js 函数提升和变量提升》
《前端工程师面试宝典|this指向》