题目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 getNamefunction 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指向》
