Подтвердить что ты не робот

Объявление функции JavaScript

Являются ли приведенные ниже фрагменты кода JavaScript некоей декларации функции? Если нет, кто-то может дать обзор того, что они собой представляют?

some_func = function(value) {
    // some code here
}

и

show:function(value){
   // some code here
}
4b9b3361

Ответ 1

Первый - это просто создание анонимной функции и назначение ее переменной some_func. Поэтому использование some_func() вызовет функцию.

Второй должен быть частью нотации объекта

var obj = {
  show:function(value){
    // some code here
  }
};

Итак, obj.show() вызовет функцию

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

Ответ 2

Существуют шесть способов/контекстов для создания функций:

1) Стандартная декларативная нотация (наиболее знакомая людям с фоном C)

function foo() {}

Все остальные выражения функции:

2) Как метод объектного литерала

var obj = {
    foo: function() {}
};

3) В качестве метода создаваемого объекта (создаваемого каждый раз new)

var Obj = function() {
    this.foo = function() {};
};

4) Как метод прототипа (созданный только один раз, независимо от того, сколько раз new выполняется)

var Obj = function() {};
Obj.prototype.foo = function() {};

5) Как анонимная функция со ссылкой (такой же эффект, как и # 1) *

var foo = function() {};

6) Как выполняемая анонимная функция (полностью анонимная)

(function() {})();

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

Ответ 3

Сначала это локальная (или глобальная) переменная с назначенной анонимной функцией.

var some_name = function(val) {};
some_name(42);

Second - свойство некоторого объекта (или функции с меткой перед ним) с назначенной анонимной функцией.

var obj = {
    show: function(val) {},
    // ...
};
obj.show(42);

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

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

var obj = {
    show: function(val) {
        if (val > 0) { this.show(val-1); }
        print(val);
    }
};

вы можете написать:

var obj = {
    show: function f(val) {
        if (val > 0) { f(val-1); }
        print(val);
    }
};

Ответ 4

Один из способов сделать это:

var some_func = function(value) {  
    // some code here
}

Другой способ:

function some_funct() {
}

Еще один способ:

var some_object={};
some_object["some_func"] = function() {};

или

var some_object={};
some_object.some_func = function() {};

Другими словами, у них много способов объявить функцию в JS.


Второй пример неверен.

Ответ 5

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

Ответ 7

В первом примере создается глобальная переменная (если локальная переменная этого имени еще не существует) называется some_func и присваивает ей функцию, поэтому можно вызвать some_func().

Второй пример - это объявление функции внутри объекта. он присваивает функцию как значение свойства show объекта:

var myObj = {
    propString: "abc",
    propFunction: function() { alert('test'); }
};

myObj.propFunction();

Ответ 8

Первый...

some_func = function(value) {  
    // some code here
}

объявляет переменную и присваивает ей анонимную функцию, которая эквивалентна...

function some_func (value) {  
    // some code here
}

Второй должен выглядеть так:

obj = {
    show:function(value){
       // some code here
    }
}
// obj.show(value)

и эквивалентно...

//pseudo code
class MyClass {
    function show (value) {
        // some code here
    }
}
obj = new MyClass();    // obj.show(value)

Приветствия