Разрушение, рассказ о трех пожарах ES6

Java внешний интерфейс JavaScript Язык программирования

Я Жсер и я горжусь

JavaScript теперь можно охарактеризовать как богатый красавец, синонимичный Казахстану, контратака с петухом, от рождения до популярности оригинальной шутки, например, Wang beat the pack, теперь на Github, JS накинут на весь Интернет, чтобы кататься и петь, тоже больно сам от бабушки дед Мэтт убить маленький скрипт не любит выродившийся в мейнстрим язык программирования на высокий. Удача важна, ES6 позволяет каждому увидеть язык своих собственных усилий и прогресса, я считаю, что данный JavaScript многообещающий.

ES6 был выпущен в июне 2015 года, поэтому его еще называют ES2015, которому уже больше двух лет. В 2015 году это был год разума, в этом году фондовый рынок рухнул, а два голоса в руках оказались еще более горькими. То же самое в этом году, стандарт ES6 приземлился, как front-end разработка, ребенок счастлив.

Новый синтаксис ES6 очень сломан, и если вы хотите систематически его изучать, я настоятельно рекомендую г-на Руана Ифэна.Начало работы с ECMAScript 6. Цель этой статьи не в том, чтобы представить новый синтаксис ES6, а в том, чтобы рассказать о том, что ES6 привносит в язык JavaScript, что, по нашему мнению, является самой важной и захватывающей особенностью ES6.

объем

Область видимости всегда была инфраструктурой языков программирования. В JavaScript тоже есть область видимости, но она немного странная, и если вы не будете осторожны, она упадет в яму.

В JavaScript существует три типа областей видимости, а именно локальная, замыкающая и глобальная, соответствующие трем типам переменных области видимости, а именно локальные переменные, переменные замыкания и глобальные переменные.

Например следующий код:

var a = 'global'
function outer(){
    var b = 'closure'
    return function inner(){
        var c = 'local'

        console.log(a + ':' + b + ':' + c)
    }
}
outer()()

Выполните приведенный выше код в консоли Chrome при выполненииouter()()час,a,outerВсе они являются глобальными переменными, и все глобальные переменные в среде браузера связаны с глобальными переменными.windowна объекте.bэто переменная закрытия, даtempФункции, определенные внутри функций, остаются видимыми.cявляется локальной переменной, только дляinnerвидны внутри функции.

Вроде бы нет проблемы, давайте разберемся с проблемой:

if(true){
    var _a = 1
}
console.log(_a)

нормальные обстоятельства,_aдолжно бытьundefinedЭто верно, но не думайте, что это то, что вы думаете, это то, что вы думаете.ifПеременные, определенные в блоках операторов_aнепосредственно в глобальную переменную. Если он перенесен из основных языков программирования, таких как язык C и Java, это еще больше запутывает.Это просто TMD ненаучно.

Такие какfor,while,switchБлоки кода, за которыми могут следовать фигурные скобки, не могут определять локальные переменные. Все определения являются глобальными переменными. Только первый член функции может определять локальные переменные. Это ненаучно, неразумно и несовместимо с основными социалистическими ценностями\безумием.

На ура ES6 приземлился, прекрасно компенсируя недостатки, обнаруженные выше JavaScript. Отныне вы можете думать, что вы думаете, это то, что вы думаете. ES6 Для обратной совместимостиvarвсе еще оригинальныйvarОн остается без изменений, и на его основе добавляется новое ключевое слово для объявления переменныхletи ключевое слово, которое объявляет константыconst.

{
    let a = 1
}
console.log(a)
// Uncaught ReferenceError: a is not defined

Механизм идеальной области действия может эффективно избежать искажения имен, повысить надежность программы и уменьшить количество непонятных ошибок, особенно при разработке крупномасштабных совместных проектов с участием нескольких человек. Поэтому лучше всего использовать от начала до концаlet, вместо того, чтобы позволитьvarУблюдок появился в поле зрения.

модульная система

Модульность, модульность, модульность, важная вещь, о которой говорится трижды, это первый приоритет инженерии, и это самая важная мера для контроля сложности программного обеспечения.Это не одна из них. Однако язык JavaScript до 2015 года не имел модульной системы. C имеетinclude, у Java естьimport, даже у CSS хромает@import, wrnmmp, JavaScript, но толькоundefined. Если у вас есть условия, вы должны идти, а если у вас нет условий, вы должны идти туда. В результате воины в сообществе JavaScript создали различные колеса, реализующие модульность, и появились AMD, CMD и UMD. Я не хочу его использовать и страдаю от отсутствия хорошего решения, поэтому могу только плакать в душе, это ненаучно, неразумно и несовместимо с...\Безумие.

Thunderbolt, ES6 приземлился, принеся нативную модульную систему, элегантную и простую, шелковистый опыт разбавляет боль, вызванную половинчатым разрезом, а лицо полно давно потерянных улыбок.

Самое основное использование:

/* add.js */
export function add(a, b){
    return a + b
}

Приведенное выше определение определено, и модуль ES экспортирован. Далее вы можете сослаться на любой из логических файлов:

/* main.js */
import {add} from './add'

add(1, 3)

Какая модульная система сильнее, ES6 самая безудержная. Как только вышел ES6, он прорезал беспорядок быстрым ножом, напрямую положив конец многолетнему модульному хаосу на переднем конце и реализовав великое объединение. Единственное сожаление заключается в том, что поддержка Node.js для модульной системы ES6 еще не является плавным переходом. Но это нормально, в конце концов, CommonJS Node.js довольно прост в использовании.

С модульной системой на уровне языка JavaScript также претерпел изменения в природе языка.Это больше не маленький сценарий, который использовался во всем Интернете, а превратился в основной язык программирования, который относительно легкий. -масса. Модульная система является незаменимой стандартной конфигурацией для крупномасштабных проектов и очень важна для разработки и обслуживания проектов. Так что не будет преувеличением назвать его самой важной функцией, которую предоставляет ES6.

Класс (Класс)

На самом деле эта фича менее важна, чем первые две.Говоря грубо говоря, класс делает то же самое, что и JS-прототип (прототип) — наследование, мы думаем, что и без этого неплохо.Приятный синтаксический сахар характерная черта. Он указан здесь, потому что мы долгое время были недовольны прототипом.

Механизм наследования на основе прототипов JS заимствован из языка Self. Как выразились разработчики JS, «это секс на одну ночь между Си и Селфом». Прототипное наследование очень неинтуитивно или, скорее, не является общепринятым. Типичным наследованием в объектно-ориентированном программировании является наследование на основе классов.Например, основные языки программирования, такие как Java и C++, реализуют наследование на основе классов.

При использовании прототипа появится jQueryjQuery.prototype.init.prototype = jQuery.prototypeТакой код, от которого люди мгновенно окаменевают. Более того, если мы посмотрим налево и направо, и посмотрим вверх и вниз, мы не увидим никаких преимуществ прототипного наследования по сравнению с наследованием классов, но чем больше мы на него смотрим, тем оно неуклюже. Первый раз, когда мы увидели прототип, это было очень неприятно, может быть потому, что он был разработан на C++.

К счастью, ES6 принесclass, я не знаю, что все думают.В любом случае, наши сердца полны радости, и есть ощущение, что мы снова видим друг друга после долгой разлуки.

Давайте рассмотрим самый простой пример:

/* Point.js */
export class Shape{
    this.x = 0
    this.y = 0
}

Слепой монах из League of Legends сказал: «Классы бессмысленны, если они не предназначены для наследования».

import {Point} from "./Point"

class Triangle extends Point{
    constructor(){
        super()
        this.sides = 3
    }
}
let a = new Triangle()

Этот код выглядит таким интуитивно понятным, щедрым и удобным. Концепция объектно-ориентированного подхода все шире распространяется во фронтенде, и нас тоже очень уважаютclassЯ не знаю, какой из них мне нравится использовать, во всяком случае, я не вижу тени прототипа в нашем коде.