История изменений
Исправление AndreyKl, (текущая версия) :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// if(condition2) {
// return a
// }
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition2.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исправление AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// if(condition2) {
// return a
// }
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition2.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исправление AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// if(condition2) {
// return a
// }
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition2.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исправление AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// if(condition 2) {
// return a
// }
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition2.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исправление AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// if(condition 2) {
// return a
// }
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исправление AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// return a
// }
return a
}
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Выходит, обязательно, если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести (как мне не делает чести переход на личности в случае с Vit).
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.
Исходная версия AndreyKl, :
Так или иначе, твой аргумент про то что «не надо вводить», это гм, не совсем корректно.
Вот гляди,
var a = 2
function getA() {
// var a = 3
// if(condition) {
// var a = 4
//
// return a
// }
return a
}
Если раскомментировать первую строку в функции, то вернётся 3, а иначе возвращается 2.
Т.е. очевидно, что появляется новая переменная, локальная для скоупа. Сколько бы ты ни пытался меня убедить что «объявлять не обязательно», и прочие странные вещи, но по факту, — если ты хочешь локальную переменную, ты обязан её объявить (если это не аргумент функции).
До сих пор поведение логично и отвечает ожиданиям.
Попутно вопрос, если «объявлять не обязательно», то будешь заводить новую локальную переменную если её не объявишь? Обязательно если хочешь завести. Вот в пхп - не обязятельно, действительно. Там, как ты верно заметил, наоборот, чтобы воспользоваться глобальной переменной надо сначала сказать об этом.
Но в яваскрипте фокус в том что если раскоментировать блок if, то функция вернёт четыре. Вне зависимости от condition.
Т.е. в первый раз var создало новую переменную, а во второй - не создало. Это поведение противоречиво.
Повторюсь, что логично было бы, даже для того скоупа что есть выдавать ошибку при повторной декларации (области видимости). Меня бы это устроило и я бы не считал это ошибкой дизайна.
Но то что есть - просто непродумано да и всё. Я верю что когда то так было и в других языках. Я этого не знал, пока выше не привели пример с си. Но сегодня, те языки что пережили это «когда то» уже изжили это (по крайней мере тот же си, может действительно экзотика которую не используют массово для написания чего то более-менее крупного ещё тащит). Остальные никогда не имели, потому что их авторы были чуть дальновиднее и грамотнее. Причём сегодня очевидно, что так делать не стоит. Яваскрипт всё ещё тащит это.
Поэтому когда вы с Vit'ом и ещё парочкой фанатиков дурно пахнущей субстанции на голубом глазу утверждаете что дело в том что я чего то не знаю, это выглядит весьма странно.
И да, я сразу сказал что я знаю о том как оно себя ведёт. Но когда пишешь - бывает забываешь, из за того что пишешь не только на яваскрипте. И да, линтер бы подсветил. Но оно всё ещё так как есть и даже ворнингов не выдаёт. За что мы и любим яваскрипт, как я и сказал.
То что вы отрицаете очевидное, не делает вам чести.
Ну, а то что яваскрипт мы любим совсем не только за это, это вопрос сильно спорный, поэтому я в топике о нём не писал. Мне нравятся языки с хорошо продуманными системами типов, которые позволяют избавиться от многих классов ошибок. При этом на мой взгляд все «преимущества» динамических языков и языков с простыми системами типов (кроме ассемблера, си) быстро сходят на нет с объёма кода и такие языки представляют только проблемы по сравнению с современными решениями. Более наивные люди любят «гибкость» динамических языков. Ну бог им судья, тема была не об этом.