跳到主要内容

代码段记录

代码记录

主要是记录一些有趣的例子,不然每过一阵子总要从头码一遍,以后如果有机会给别人面试也方便出题...

  1. 词法作用域

函数的作用域位于声明函数时所在的作用域

let x = 1
let A, B, C
{
let x = 2
A = function() {
console.log(x)
}
B = function() {
x = 10
}
}
{
let x = 3
C = function() {
console.log(x)
}
A()
}
B()
C()
  1. 尾调用

函数作用域在其被调用时创建,执行完销毁

function A() {
let a = 1
let b = 2
A()
}
// vs
function A() {
let a = 1
let b = 2
A()
let c = 3
}
  1. 异步的写法
// 改写
A('file', (err, data) => {
if (err) {
console.log(err)
}
console.log(data)
A('file', (err, data2) => {
if (err) {
console.log(err)
}
console.log(data2)
})
})

// 完美写法
async function B() {
try {
let data = await A('file')
console.log(data)
let data2 = await A('file')
console.log(data)
} catch (err) {
console.log(err)
}
}
  1. 考察Hook
function App() {
const [count, setCount] = useState(0)
const [count2, setCount2] = useState(0)
const fn = useCallback(() => {
console.log(count)
}, [count2])
return (
<div>
{count}
<button onClick={() => setCount(100)}>按钮A</button>
<button onClick={() => setCount2(10000)}>按钮B</button>
<button onClick={fn}>按钮C</button>
</div>
)
}

// 依次点A, C 输出0
// 依次点A, B, C 输出100