Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   За что вы любите Javascript? (https://javascript.ru/forum/offtopic/57549-za-chto-vy-lyubite-javascript.html)

EmperioAf 08.08.2015 18:53

За что вы любите Javascript?
 
"Чтобы что то делать надо это любить или ненавидеть"(с)

Чтобы годами делать "как бы" одно и то же (писать код на объектно-ориентированных императивных языках программирования) определённо нужно иметь интерес к выполняемой работе.
Вопрос в названии темы.

P.s. меня пока что привлекает магия, что многие сложные задачи можно сделать только из сочетания function и {}. Мне это напоминает одну из лучших (по простоте правил, ибо мне лень учить много правил и поэтому я не играю в доту) игр:
https://ru.wikipedia.org/wiki/Жизнь_(игра)

javaQest 08.08.2015 19:10

Цитата:

Сообщение от EmperioAf
что многие сложные задачи можно сделать только из сочетания function и {}

это какие же например? Не совсем понятно, что имеется в виду, не могли бы Вы поподробней?

По сабжу. Я люблю JS за динамику. Он не так динамичен, как Ъ, но не скатился пока до уровня жаба/++. Впрочем, скатывается потихоньку, к сожалению.

Была бы моя воля, я бы не учил JS, есть несколько языков, которые его наголову превосходят, для души они милей. Но он очень распространен сейчас, без него никуда. Во всяком случае, это далеко не худший язык из попсовых, один из лучших.

EmperioAf 08.08.2015 19:20

Цитата:

Сообщение от javaQest
это какие же например? Не совсем понятно, что имеется в виду, не могли бы Вы поподробней?

я наверное плохо выразился, я имел ввиду примерно такие выражения:
var name = "";

var user = {
  name: "Василий",

  export: function() {
    return {
      value: this
    };
  }

};

alert( user.export().value.name );

javaQest 08.08.2015 19:27

Цитата:

Сообщение от EmperioAf (Сообщение 383269)
я наверное плохо выразился, я имел ввиду примерно такие выражения:
var name = "";

var user = {
  name: "Василий",

  export: function() {
    return {
      value: this
    };
  }

};

alert( user.export().value.name );

Ну, и какую задачу Вы решаете этим кодом?

EmperioAf 08.08.2015 19:35

Цитата:

Сообщение от javaQest
Ну, и какую задачу Вы решаете этим кодом, который, по сути, то же самое что

внутри метода export могло быть всё что угодно - любая обработка. А дальше мы просто вызываем user.export() и получаем всё что там рассчитали. Но я на самом деле хотел сказать о модулях:
;(function(){
// some code
    return result;
}());

Просто я как ребёнок смотрю на всё это. Понимаете? Для меня почти каждый вопрос в https://learn.javascript.ru/quiz/js-basic сложен, ибо мне многое непонятно. И хотя я 90% вопрос уже видел по 3-5+ раз я по-прежнему прохожу эти тесты обычно на 70-80%...

javaQest 08.08.2015 19:50

Цитата:

Сообщение от EmperioAf
Но я на самом деле хотел сказать о модулях:

Ну, модули, это не совсем часть языка, скорей, вариант реализации.

Цитата:

Сообщение от EmperioAf
;(function(){
// some code
    return result;
}());

На этом многие новички спотыкаются. Это делается для инкапсуляции данных. У Вас, при таком вызове, создается замыкание, и все переменные, объявленные через var, будут видимы только внутри ф-ций, созданных в данном окружении.

На самом деле, это тема лексических замыканий. Она довольно забубеннная. Ключ к пониманию тут лежит в подковерной возне интерпретатора. При создании любой функции, создается подковерный объект, неймспейс, с котором дефолтно связываются переменные, внутри ф-ций.

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

Вы не правы, что без этого нельзя обойтись, вполне можно. любое замыкание -- это по-сути, не более чем функция+окружение. Поэтому

f=function(){
  var x=1
  return function(){alert(x)}
}()

//то же самое, что

o={
 x: 1,
 f: function(){alert(this.x)}
}

f()
o.f()

за исключением инкапсуляции(в плохом смысле).

рони 08.08.2015 19:58

Цитата:

Сообщение от javaQest
return this.x}

может alert(this.x) для наглядности

javaQest 08.08.2015 19:59

рони,
Да, исправил, спасибо.

javaQest 08.08.2015 21:28

Цитата:

Сообщение от Rise
пишет undefined

Ваш код пишет, да, а в чем вопрос?

javaQest 08.08.2015 21:35

Rise,
Если вопрос, почему, то ответ -- потому что ваша функция вызвана вне контекста о. А первую f вы затерли вторым присваиванием


Часовой пояс GMT +3, время: 23:53.