tgoop.com/zede_code/76
Create:
Last Update:
Last Update:
Ответ:
И это не просто так, ибо поведение хоть и без особого подвоха, но 1 особенность в JS есть которая может повлиять на все происходящее: это strict mode.
Да, strict mode это вам не только "больше нельзя перезаписать arguments у функций и this по-умолчанию undefined". Там
Что же сейчас должно зацепить наш взгляд? А вот этот пункт, который нам уже частично знаком (сделал для удобства ленивых сразу с переводом)
Если this оценивается в strict mode, то значение this не преобразуется в объект. Значение this, равное undefined или null, не преобразуется в глобальный объект, а примитивные значения не преобразуются в объекты-обертки. Значение this, переданное через вызов функции (включая вызовы с использованием Function.prototype.apply и Function.prototype.call ), не преобразует переданное значение this к объекту ( 10.2.1.2 , 20.2.3.1 , 20.2.3.3 ).
Те мы все знаем первую часть про то что мы не берем глобальный объект по-умолчанию, а вот то что меняется поведение для других примитивов - большинство не знает. Те в strict mode у this может быть значение `4` / `"string"` / `Symbol` и тп, а вот без него там окажутся результаты выражений `"new Number(4) / new String("string") / (ага, а вот для Symbol так не прокатит, у него нет вызова через new :D)"`. Вот и получается, что не зная в каком режиме запущен код, то вы не знаете какой будет результат у выражения. Забавно, что это реально приводило к багам на проде(например, такая проблема всплывала у автора эффектора
Еще занимательный момент вытекающий из пунктов выше, что 'use strict' должен быть внешний. Те
```
function a() { return this }
function b() { 'strict mode'; return this }
```
разницы никакой не несет в этом плане
BY zede code
Share with your friend now:
tgoop.com/zede_code/76