Javascript.RU

Function

Создание

new Function ([arg1[, arg2[, ... argN]],] functionBody)

Аргументы

arg1, arg2, ... argN
Имена параметров для создаваемой функции. Каждый аргумент должен быть строкой, которая является корректным идентификатором javascript или списком таких строк, разделенных запятой. Например: "x", "theValue" или "a,b".
functionBody
javascript-код тела функции

Описание, примеры

Каждая функция в яваскрипт является объектом класса Function.

Все аргументы, переданные функции, интерпретируются как имена параметров для создаваемой функции, в порядке их перечисления.

Вызов конструктора Function как функции работает так же, как вызов с new. Иначе говоря, оператор new при вызове Function необязателен.

Пример: Пример создания функции
var multiply = new Function("x", "y", "return x * y")
// или так:
var multiply = new Function("x,y", "return x * y")

var theAnswer = multiply(7, 6);

Методы

call
apply

Свойства

length

См. также


Автор: yolka, дата: 29 декабря, 2009 - 00:18
#permalink

// более интересные пример работы объекта Function, в качестве данных:

function attr1(x, y) { // определяем функцию и ее механизм выполнения
          return x + y;
}

function attr2(x,y) { // определяем функцию и ее механизм выполнения
          return x * y;
}

/* передаем в качестве аргументов вышеопределенные функции и возвращаем значение для двух операндов */

function init(define, argument1, argument2){ 
          return define(argument1, argument2);
}

document.write(init(attr1, init(attr1, 5, 5), init(attr2, 5, 5))); // вызываем

Автор: Гость (не зарегистрирован), дата: 3 июля, 2011 - 18:47
#permalink

Вообще нужно добавить в эту же статью три способа создания функций:
1)Через new (и Function должно начинаться с большой буквы)
2)анонимные функции function () {} (function с маленькой буквы)
3)обычные function func () {}
Упомянуть также про переменную arguments.
Неполная статья, учитывая что на неё прямая ссылка из Справочника по JavaScript.


Автор: ferendy (не зарегистрирован), дата: 23 ноября, 2011 - 19:53
#permalink

Полностью поддерживаю, на счёт того что статья очень неполная.
В справочнике таким статьям не место.
Пусть лучше ничего не будет, чем недосказанности.

Я б ещё упомянул про то, что length выдаёт количество параметров, которые при объявлении функции были указаны.

То есть arguments.length и func.length скорей всего будут отличаться (потому что иногда вообще при объявлении функции не пишут параметры явно).

qwerty = function(a,b)
{
   return [this.length, arguments.length]
}

функция выдаст массив из двух элементов.

a = qwerty(1, 2, 3, 4);

a[0] - будет равно 2
a[1] - будет равно 4

а ещё функция может быть индексом массива =)))))
проверьте:

var myArr = [];
myArr[0]  = 123;
myArr["blablabla"] = 234234;
myArr[qwerty] = "А вот такое вы знали?";

Автор: ferendy (не зарегистрирован), дата: 23 ноября, 2011 - 19:55
#permalink

Ой, извиняюсь, внизу заметил ссылочки)))
Но тем не менее существование таких вещей стоило бы и в описании привести.


Автор: sawa (не зарегистрирован), дата: 5 января, 2012 - 21:09
#permalink

Я недавно изучаю JS) Почему перед названиями параметров функции отсутствует var?
К примеру:

function attr1(var x,var y) {
    return x + y;
}

Автор: cranx, дата: 1 февраля, 2012 - 14:15
#permalink

Параметры функции всегда становятся её локальными переменными, поэтому var там ни к чему...


Автор: realstranger, дата: 18 августа, 2015 - 11:35
#permalink

Потому что X и Y - это аргументы, а не переменные.


Автор: Андрей+ (не зарегистрирован), дата: 7 июля, 2012 - 12:49
#permalink

Можете объяснить подсказать литературу вот такого синтаксиса (function() {})();


Автор: Дзен-трансгуманист, дата: 7 июля, 2012 - 18:17
#permalink

Таким способом создается замыкание, которое тут же исполняется.

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

Подробнее здесь


Автор: Anon (не зарегистрирован), дата: 18 июля, 2015 - 02:18
#permalink

Вместо замыкания вида

(function(){})();

можно использовать типа

!function(){}();

Это позволит сэкономить один символ ценой одной логической операции. В принципе нафиг не стоит ломать над этим голову, просто если встретите - то знайте, это - замыкание, такое же как и первое. Единственная разница - это возвращаемое значение.


Автор: V@dos, дата: 28 октября, 2012 - 10:23
#permalink

люди нужна помощь, плиз, подскажите как сделать функцию чтобы при нажатии на кнопку увеличивалась ширина div, каждый раз


Автор: shkoder, дата: 2 мая, 2013 - 18:15
#permalink
var jsonFromServer = '{"a":{"b":1,"c":[1,2,3,4]},d:true}';

var jsonParse = function(json){
    var result;
    try {
        result = (new Function('result', 'return '+json+';'))(result);
    } catch(e){};
    return result;
};

console.log(jsonParse(jsonFromServer));

Автор: shkoder, дата: 2 мая, 2013 - 18:18
#permalink
var тут = this;
var сообщение = alert;
var функция = Function;
функция.прототип = функция.prototype;
функция.прототип.вызывать = функция.прототип.call;
сообщение.вызывать(тут, '1С-style!!!');

Автор: Slavasil (не зарегистрирован), дата: 2 января, 2017 - 19:01
#permalink


Автор: cementovoz (не зарегистрирован), дата: 7 марта, 2014 - 11:42
#permalink

Забыли про Function.propotype.bind - смена контекста (this) в функции

function a () {
console.log(this.b)
}

a() // undefined

var c = a.bind({b:42})

c() // 42


Автор: Botu (не зарегистрирован), дата: 4 марта, 2015 - 20:05
#permalink

Кто-нибудь знает, что за конструкция
!function - в самом начале jquery используется.


Автор: Анон (не зарегистрирован), дата: 18 июля, 2015 - 02:19
#permalink

Смотри мой коммент выше, про замыкания.


Автор: botu (не зарегистрирован), дата: 5 марта, 2015 - 16:00
#permalink

Опытным путем нашел ....

!function(a,b)
{

}

(arguments);

Это практически тоже самое, что и просто

(
function(a,b)
{

}
)(arguments);

По второму варианту только и очень много вопросов и ответов было в инет...
А вот по варианту с !function(){}(); почему то ничего нету ...

Нашел чисто по наитью, точно что это такое и в чем разница - не знаю ...

Если кто знает - отпишитесь плиз ...


Автор: Анон (не зарегистрирован), дата: 18 июля, 2015 - 02:31
#permalink

Да разницы нет. Если тебе не нужно значение, которое вернёт функция из замыкания, а просто нужно выполнить функцию - то используй конструкцию с !. В принципе - это всего лишь экономия одного символа не более. Всё! Иными словами

var t = 0;
var y = (function(){ return 5; })();
!function(){ window.t = 3; }();
var z = !function(){ return true; }();
// в итоге
// t = 3;
// y = 5
// z = false;

Так то ! - это ни что иное как логическое отрицание. То самое которе true превращает в false и наоборот. Ну например !3 - это false. Здесь это отрицание вынуждает к вычислению подлежащие выражение. Т.е. сама по себе конструкция:

function(){}()

вычислена не будет. А ! заставляет её вычислиться - чтобы знать, что отрицать. Такие дела. С таким же успехом (но с другими побочными эффектами) можно вместо ! использовать например:

var t = function(){}();
1 + function(){}();
"" + function(){}();
// ... etc

Автор: Гость (не зарегистрирован), дата: 24 сентября, 2015 - 17:42
#permalink

Вот здесь все это очень подробно описано https://learn.javascript.ru/closures-module


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
8 + 2 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Реклама
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum