У меня есть два куска кода, каждый из которых работает как положено:
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)
и
function Test() {}
(function() {
console.log(this)
}).call(Test)
Они оба дают ожидаемый результат: [Function: Test]
.
Однако, когда эти независимые фрагменты кода объединяются, это приводит к ошибке. Итак, запускаем следующий код
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)
(function() {
console.log(this)
}).call(Test)
Результаты в
TypeError: tmp.call(...) is not a function
Я нашел не элегантное исправление для этого, которое добавляет задержку ко второму фрагменту кода. Таким образом, следующее даст желаемый результат ([Function: Test]
дважды):
function Test() {}
let tmp = function() {
console.log(this)
}
tmp.call(Test)
setTimeout(() => {
(function() {
console.log(this)
}).call(Test)
}, 100);
Тот факт, что тайм-аут, кажется, исправляет это, заставляет меня думать, что это связано с некоторыми асинхронными вещами, но я не могу точно объяснить , почему это происходит.