с глобальным контекстом связана любая функция, для этого не требуется замыкание.
function f() {
let x = 0, y = 0;
return () => {
debugger;
return 0;
};
}
let ff = f();
ff();
ссылается на какую-либо переменную в нём внутренняя функция или нет - дело десятое и к замыканию отношения не имеет.
function f() {
let x = 0, y = 0;
return () => {
debugger;
return x;
};
}
let ff = f();
ff();
import { makeObservable, observable, action } from 'mobx'
import React from 'react'
import { observer } from 'mobx-react-lite'
class Store {
constructor() {
makeObservable(this)
}
@observable value1 = 1
@observable value2 = 1
@action inc1 = (): void => {
this.value1 += 1
}
@action inc2 = (): void => {
this.value2 += 1
}
@action incAll = (): void => {
this.inc1()
this.inc2()
}
}
const store = new Store()
export const App: React.FC = observer(() => {
const handler = (): void => {
setTimeout(() => {
store.inc1()
store.inc2()
//store.incAll()
}, 10)
}
console.log('render', store.value1, store.value2)
return (
<button type="button" onClick={handler}>
{store.value1}, {store.value2}
</button>
)
})
это выясняется во время парсинга js - компилятор сразу видит, что за переменные используются во вложенных функциях.
кроме случая, когда во внутренней функции есть богомерзкий eval - тогда в замыкание попадает вообще всё, без разбора.