Leave a Comment
Странный вывод странного кода
1 2 3 4 5 6 |
var x = 'outer'; (function() { var x = 'inner'; eval('console.log(x)'); (1,eval)('console.log(x)'); })(); |
выведет
1 2 |
inner outer |
Почему?
Вкратце — судя по всему, eval работает с контекстом корректно только при прямом вызове. А если вызвать его ненапрямую, например
1 2 |
var ev = eval; ev('console.log(x)'); |
то и в этом случае контекст сбросится на глобальный.
Тут есть попытки объяснения:
http://stackoverflow.com/questions/19357978/indirect-eval-call-in-strict-mode
http://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.