Функция является наиболее часто используемой концепцией в JavaScript. Функция в JavaScript - самая простая функция для начала, но это также самая сложная концепция для понимания и освоения JavaScript.
1. Тип функции является одним из эталонных типов в JS. Каждая функция на самом деле является объектом экземпляра типа функции, со своими собственными свойствами и методами. Из -за функционального объекта имя функции на самом деле является указателем на объект функции.
2. Обычно используемые методы определения функции
1. Объявление функции:
Функция сумма (a, b) {return a+b;}2. Выражение:
var sum = function () {return a+b; }; // Обратите внимание на полуколон // разница между двумя методами: // Интерпретатор будет первым, кто прочитал объявление функции и сделает его доступным до выполнения. При использовании выражения вы должны подождать, пока анализатор не выполнится в строку кода, где оно будет расположено до того, как он будет интерпретирован и выполнен (объявление переменной увеличивается, в то время как значение остается на месте) предупреждение (сумма (10, 10)); Функция сумма (a, b) {return a+b;} // ↑ Приведенный выше код будет выполнен нормально, потому что до выполнения кода сиятель будет продвигаться через объявление функции, прочитать и добавить объявление функции в среду выполнения и поместить его в верхнюю часть предупреждения о деревах кода (typeof sum); предупреждение (сумма (10, 10)); var sum = function (a, b) {return a+b;} // ↑ причина в том, что функция находится в операторе инициализации, а не в объявлении функции, и не будет продвинута, но будет только продвигать сумму VAR и использовать оператор TypeOF, чтобы показать, что сумма не определена, поэтому ошибка сообщается об ошибке.3. Имя функции только содержит указатель на функциональный объект, поэтому имя функции не отличается от других переменных, содержащих указатель объекта, то есть функциональный объект может иметь несколько имен:
Функция сумма (a, b) {return a+b;} console.log (sum (2, 3)); // 5var anothersum = sum; // переменная Anothersum также указывает на ту же консоль объекта функции. Log (Anothersum (4, 5)); // 9sum = null; // переменная суммы больше не сохраняет указатели на консоли объекта функции. log (anothersum (1, 3)); // переменная anothersum все еще может быть вызвана4. Почему JS не перегружает концепцию.
Функция добавить (a) {return a+3;} функция добавить (a) {return a+5;} var result = add (3); // 8 // Две функции имеют одинаковое имя, и результат может быть только последней функцией перезаписывает предыдущую, поэтому его нельзя перезагрузить5. Внутренние свойства функции: внутри функции есть два специальных объекта, аргументы и это
1. Аргументы:
Аргументы - это массив объект класса, содержащий все параметры входящей функции. Этот объект имеет атрибут под названием Callee. Значение свойства является указателем, указывающим на саму функцию, которая владеет объектом аргументов.
function foo () {var a = arguments.callee; вернуть a.toString ();} foo ();/*return result: "function sum () {var a = arguments.callee; return a.toString ();}", то есть внутри функции, аргументы. Эта функция несколько полезна, если ее называть рекурсивно, имеет много недостатков и удаляется в строгом режиме ES5*/2. Это: проще говоря, это относится к объекту окружающей среды, в котором выполняется функция. Это относится к объекту, в котором объект выполняется. Это довольно сложно расширить, только одна статья
// todo:
3. ES5 указывает другое свойство функции: вызывающий абонент. Это свойство функции относится к функции, которая вызывает текущую функцию.
function inner () {console.log (inner.caller);} функция outter () {inner ();} over (); // function outter () {inner ();}4. Атрибут длины: указывает количество параметров, которые функция хочет принять
Функция добавить (a, b, c) {return a+b+c;} add.length; // 35. Знаменитый атрибут прототипа, проще говоря, представляет собой объект, объект, созданный на вызове конструктора, содержащего свойства и методы, которые могут быть переданы всеми экземплярами определенного типа. Это довольно сложно расширить, только одна статья
// todo:
6. Два метода функции: call () и Apply (). Они оба вызывают функцию в определенной области, и на самом деле они устанавливают это значение внутри функции.
1. Call (): аналогично методу Apply (), разница в том, что метод получения параметров отличается, а параметры должны быть перечислены один за другим.
2. Apply (): получает два параметра, один - это область применения функции, а другой - это массив параметров, которые могут быть массивом или объектом массива класса аргументов.
Функция sum (a, b) {return a+b;} function callsum (a, b) {return sum.apply (this, аргументы);} // Второй параметр - это объект массива Argumentsfunctionfunction1 (a, b) {return sum.Apply (это, [a, b]);} // второй параметр является консолью Array. // 5 console.log (callsum1 (3, 5)); // 83. Передача параметров и вызова не являются местом, где используются Call () и Apply (). Настоящая мощная вещь в операции функции расширения - это область применения
var color = 'red'; var obj = {color: 'blue'} function foo () {console.log (this.color); } foo (); //'red'foo.call(Tis) ;//'red'foo.call(Obj); // 'Blue' // Среда выполнения последнего вызова функции Foo () изменилась, и это указывает на объект OBJ, так что он «синий»Самым большим преимуществом использования Call () и Apply () для расширения объема является отделение объектов и методов
4. ES5 определяет новый метод: bind (), который возвращает функцию, в которой это значение будет связано со значением, передаваемым с функцией bind ().
var x = 9; var module = {x: 81, getx: function () {return this.x; }}; module.getx (); // 81var retrievex = module.getx; retrievex (); // 9, потому что в этом случае «эта» указывает на глобальную переменную var boundgetx = retrievx.bind (module); // связывать это в функции retrievex () с модулем навсегда, а затем вызовут эту функцию, чтобы всегда запускать Boundgetx () в объекте модуля; // 81Выше представляет собой углубленный анализ типов функций в JavaScript, представленном редактором. Я надеюсь, что это будет полезно для вас. Если вы хотите узнать больше, пожалуйста, обратите внимание на wulin.com.