3.
Тип происходит из JavaScript и принадлежит JavaScript.
, независимо от того, передается ли написанный нами JavaScript в браузер или на выполнение узла, в конечном итоге он должен выполняться ЦП, поэтому нам нужен движок JavaScript, который поможет нам преобразовать код JavaScript в инструкции ЦП для выполнения
Здесь мы рассматриваем WebKit, поскольку столбец фактически состоит из двух частей:
WebCore: отвечает за анализ HTML, макетирование, рендеринг и другую связанную работу.
кода JavaScript
и записьобъекта переменной VO (Variable Object) В последнем стандарте ECMA VO уже имеет другое имя для глобального объекта переменной среды VE
GO (Clobal Object) и глобального контекста выполнения
AO (Activation Objece). ) включает
JavaScript выделит нам память при определении переменных.
JS выделяет память для базовых типов данных непосредственно в пространстве стека во время выполнения;
Выделение памяти JS для сложных типов данных откроет пространство в куче памяти и ссылается на переменную возвращаемого значения указателя этого пространства,
что размер памяти ограничен , поэтому, когда памяти больше нет. нужно, нам его нужно освободить, чтобы освободить больше места в памяти.
Сборка мусора по-английски — это сборка мусора или GC.
Объекты, которые больше не используются, мы называем мусором. Их необходимо переработать, чтобы освободить больше места в памяти. Наша языковая среда выполнения, такая как среда выполнения Java JVM и движок среды выполнения JavaScript, будет собирать мусор в памяти. сборщик мусора, мы также называем его для краткости GC, поэтому во многих местах вы видите, что GC на самом деле относится к сборщику мусора.
— это определение замыкания в информатике (Википедия):
Замыкание (англ. Closure), также известное как лексическое замыкание (Lexical Closure) или функциональное замыкание (function closures);
Это технология, реализующая лексическую привязку в языках программирования, поддерживающих первоклассные функции;
В реализации замыкание представляет собой структуру, в которой хранится функция и связанная с ней среда (эквивалент таблицы поиска символов);
Самая большая разница между замыканием и функцией заключается в том, что при захвате замыкания его свободные переменные будут определены во время захвата, так что оно может работать как обычно, даже если оно находится вне контекста во время захвата
. Концепция замыкания появилась в 1960-х годах. Самой ранней программой, реализующей замыкания, была Scheme, поэтому мы можем понять, почему в JavaScript существуют замыкания;
Потому что многие проекты в JavaScript основаны на Scheme;
Давайте посмотрим на объяснение замыканий JavaScript в MDN:
Функция связана со ссылкой на ее окружающее состояние (лексическое окружение) (или функция окружена ссылками). Другими словами, замыкание позволяет вам получить доступ к ней внутри внутренней функции. о его внешней функции;
В JavaScript всякий раз, когда создается функция, замыкание создается одновременно с созданием функции
function foo() {; var name = 'почему' вар возраст = 18 функциональная панель() { console.log('бар',имя) } return bar}var fun = foo()fun()
Резюме:
Обычная функция-функция является замыканием, если она может получить доступ к свободным переменным, на которые воздействует внешний слой;
С широкой точки зрения: функции в JavaScript — это замыкания;
С узкой точки зрения: если функция в JavaScript обращается к внешней переменной, это замыкание;
на глобальную область видимости:
Браузер: окно
Среда узла: {}
Стрелочная функция — это метод написания функций, добавленный после ES6, и он более краток, чем функциональные выражения;
Стрелочные функции не будут связывать атрибуты this и аргументы;
Стрелочные функции нельзя использовать в качестве конструкторов (нельзя использовать с new, будет выдана ошибка).
— это (псевдо) массив (подобный массиву), соответствующий параметрам, передаваемым в функцию. Объект
функции
JavaScript.В функциональном программировании есть очень важная концепция, называемая чистыми функциями. JavaScript соответствует спецификациям функционального программирования, поэтому существует также концепция чистых функций,
содержащаяся в Википедии:
В программировании, если функция удовлетворяет следующим условиям, то эта функция называется чистой функцией. Когда функция имеет одно и то же входное значение, она должна выдавать тот же вывод, что и другая скрытая информация. или состояния, отличные от входного значения. Функции, не связанные с внешним выводом, генерируемым устройствами ввода-вывода, не могут иметь семантически наблюдаемые побочные эффекты, такие как «запуск событий», вызывающие вывод устройств вывода или изменение содержимого объектов, отличных от выходных значений. . Краткое содержание:
Определенный вклад должен производить определенный результат;
Во время выполнения функции не может возникнуть никаких побочных эффектов
:
Каррирование также является очень важной концепцией в функциональном программировании. В Википедии объясняется:
В информатике Карринг (Currying), также переводится как Карринг или Карринг, — это функция, принимающая несколько параметров, которая становится функцией, которая получает один параметр (первый параметр исходной функции) и возвращает новую функцию, которая принимает оставшиеся аргументы и возвращает результат. Каррированное утверждение: если вы исправите определенные аргументы, вы получите
сводку функции, которая принимает оставшиеся аргументы:
Передайте в функцию только часть параметров для ее вызова и позвольте ей вернуть область функции для обработки остальных параметров;
Этот процесс называется каррированием.
Зачем нужно каррирование:
В функциональном программировании мы часто надеемся, что проблема, решаемая функцией, является настолько простой, насколько это возможно, вместо того, чтобы передавать большую часть обработки функции для обработки
function foo(x,y,c) { вернуть х + у + с } console.log(foo(10,20,30)) //Функция карри sum(x) { возвращаемая функция(у) { возвращаемая функция (г) { вернуть x + y + z } } } вар а = сумма(10)(20)(30) консоль.журнал(а) //Упрощаем каррирование var sum2 = x => y => z => { вернуть x + y + z } console.log(sum2(10)(20)(30))
функция Комбинированная функция (Compose) — это метод и режим использования функций при разработке на JavaScript:
Например, теперь нам нужно вызвать функцию для определенных данных и выполнить две функции fn1 и fn2. Эти две функции выполняются последовательно. Если нам нужно каждый раз вызывать две функции, операция будет повторяться. Возможно ли это. объединить эти две функции и автоматически вызывать их одну за другой?
Этот процесс представляет собой комбинацию функций, которую мы называем «Составить функцию
с оператором»
.,
поскольку он может стать источником путаницы и проблем совместимости.
'} // var message = "привет, мир" функция Фу() { функциональная панель () { с (obj2) { console.log(сообщение) } } бар() } foo()
eval — это специальная функция, которая может запускать входящую строку как код JavaScript
var strFn = 'var message = "Hello world"; console.log(message);'; eval(strFn)
Не рекомендуется использовать eval в разработке:
Читабельность оценочного кода очень плохая (читаемость кода — важный принцип качественного кода);
eval — это строка, поэтому она может быть изменена во время выполнения, что может привести к риску атаки;
Выполнение eval должно проходить через интерпретатор JS и быть оптимизировано механизмом JS;
— это ограничительный режим JavaScript, который заставляет код неявно выходить из «небрежного режима». Когда браузеры, поддерживающие строгий режим, обнаруживают строгий режим в коде, они будут отслеживать и выполнять код более строгим образом. Строгий режим устранит некоторые исходные молчаливые ошибки, выдавая ошибки. Строгий режим позволяет движку Js выполнять дополнительные оптимизации. при периодическом выполнении кода (нет необходимости иметь дело с каким-то специальным синтаксисом)
"use strict"; // Включаем строгий режим var message = "hello world" console.log(message)
ограничения строгого режима <br/ > Здесь мы поговорим о некоторых строгие синтаксические ограничения в строгом режиме:
JavaScript разработан для того, чтобы начинающим разработчикам было проще начать работу, поэтому иногда считается, что неправильный синтаксис анализируется нормально. Однако в строгом режиме такие ошибки будут рассматриваться как ошибки, чтобы
// 1. Случайно создаем глобальную переменную message = «Hello world» console.log(сообщение) функция Фу() { возраст=20 } фу()Строгий режим
Console.log(age)
// Статическая ошибка по умолчанию true.name ='xiaoluo'; NaN = 123
// Параметры функции не могут иметь одинаковые имена function foo(x,y,x) { console.log(x,y,x)}foo(10,20,30)
var num = 0o123 // Восьмеричный var num2 = 0x123 // Шестнадцатеричный console.log(num,num2)
var obj2 = {name:'Tom',age:18,message:'obj2'}не разрешено
с (obj2) { console.log(сообщение) }
var верхнего уровня strFn = 'var message = "Hello world"; console.log(message);'; оценка (strFn)В строгом режиме
console.log(message)
функцию foo() {. console.log(this) //не определено } фу()