STARTPOINT_DEV Telegram 135
Недавно джавист спросил меня: "А в чём вообще проблема использования var в JavaScript?". Я на автомате ответила что-то про замыкания, но потом поняла, что конкретику-то уже подзабыла. А значит, как я люблю, самое время покопаться и вспомнить, что же с ним не так.

Почему var считается устаревшим?

Когда в ES6 в 2015 году появились let и const, почти весь мир фронтенда перешёл на них. Но var никуда не делся и до сих пор встречается в старом коде. Почему же все от него отказались?

1. var живёт в рамках функции, а не блока

Если объявить var внутри if, for или `{}`-блока, он доступен во всей функции, а если функция не задана – в глобальной области видимости.


function example() {
if (true) {
var message = "Hello";
}
console.log(message); // "Hello"
}
example();


2. var поднимается (hoisting), но остаётся undefined

Переменные, объявленные через var, поднимаются в начало функции и принимают значение undefined, если к ним обратиться до объявления.


console.log(user); // undefined
var user = "Cat";


Такое поведение, что в первом, что во втором случае, очень нетипично для большинства языков программирования и в частности поэтому может запутать.

Почему работу с var не исправили сразу, как заметили проблемы?

Когда JavaScript создавался в 1995 году, он задумывался как язык для небольших скриптов, которые просто добавляли интерактивность на веб-страницы. Никто не думал, что на нем будут писать сложные приложения с десятками тысяч строк кода. Поэтому такие вещи, как var с функциональной областью видимости, не казались проблемой – ведь весь скрипт обычно находился в одном файле и выполнялся сверху вниз. Но затем веб-разработка начала усложняться. JS стал полноценным языком для больших приложений, а старые решения начали тянуть за собой ошибки.

В ES6 наконец-то добавили let и const, чтобы исправить проблемы var, но полностью убрать или изменить принцип его работы было невозможно. JavaScript выполняется на машинах пользователей, а браузеры у всех разные – кто-то сидит на новой версии Chrome, а кто-то на старом IE. В отличие от компилируемых языков, где ты контролируешь, какая версия используется, в вебе это сделать невозможно. Поэтому var остался в языке таким, какой он есть, ради обратной совместимости.

К слову, может показаться, что особенности var – это только источник багов, но в некоторых случаях это удобно. Например, hoisting позволяет вызывать функции до их объявления.

В общем-то, JS менялся и продолжает меняться под давлением времени, и отказ от var – одна из тех вещей, которые сделали разработку на этом языке чуть предсказуемее.
👍2



tgoop.com/startpoint_dev/135
Create:
Last Update:

Недавно джавист спросил меня: "А в чём вообще проблема использования var в JavaScript?". Я на автомате ответила что-то про замыкания, но потом поняла, что конкретику-то уже подзабыла. А значит, как я люблю, самое время покопаться и вспомнить, что же с ним не так.

Почему var считается устаревшим?

Когда в ES6 в 2015 году появились let и const, почти весь мир фронтенда перешёл на них. Но var никуда не делся и до сих пор встречается в старом коде. Почему же все от него отказались?

1. var живёт в рамках функции, а не блока

Если объявить var внутри if, for или `{}`-блока, он доступен во всей функции, а если функция не задана – в глобальной области видимости.


function example() {
if (true) {
var message = "Hello";
}
console.log(message); // "Hello"
}
example();


2. var поднимается (hoisting), но остаётся undefined

Переменные, объявленные через var, поднимаются в начало функции и принимают значение undefined, если к ним обратиться до объявления.


console.log(user); // undefined
var user = "Cat";


Такое поведение, что в первом, что во втором случае, очень нетипично для большинства языков программирования и в частности поэтому может запутать.

Почему работу с var не исправили сразу, как заметили проблемы?

Когда JavaScript создавался в 1995 году, он задумывался как язык для небольших скриптов, которые просто добавляли интерактивность на веб-страницы. Никто не думал, что на нем будут писать сложные приложения с десятками тысяч строк кода. Поэтому такие вещи, как var с функциональной областью видимости, не казались проблемой – ведь весь скрипт обычно находился в одном файле и выполнялся сверху вниз. Но затем веб-разработка начала усложняться. JS стал полноценным языком для больших приложений, а старые решения начали тянуть за собой ошибки.

В ES6 наконец-то добавили let и const, чтобы исправить проблемы var, но полностью убрать или изменить принцип его работы было невозможно. JavaScript выполняется на машинах пользователей, а браузеры у всех разные – кто-то сидит на новой версии Chrome, а кто-то на старом IE. В отличие от компилируемых языков, где ты контролируешь, какая версия используется, в вебе это сделать невозможно. Поэтому var остался в языке таким, какой он есть, ради обратной совместимости.

К слову, может показаться, что особенности var – это только источник багов, но в некоторых случаях это удобно. Например, hoisting позволяет вызывать функции до их объявления.

В общем-то, JS менялся и продолжает меняться под давлением времени, и отказ от var – одна из тех вещей, которые сделали разработку на этом языке чуть предсказуемее.

BY Настя Котова // Frontend & Node.js


Share with your friend now:
tgoop.com/startpoint_dev/135

View MORE
Open in Telegram


Telegram News

Date: |

With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. 5Telegram Channel avatar size/dimensions Administrators best-secure-messaging-apps-shutterstock-1892950018.jpg
from us


Telegram Настя Котова // Frontend & Node.js
FROM American