Объявление функции JavaScript
Являются ли приведенные ниже фрагменты кода JavaScript некоей декларации функции? Если нет, кто-то может дать обзор того, что они собой представляют?
some_func = function(value) {
// some code here
}
и
show:function(value){
// some code here
}
Ответы
Ответ 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
Первый - это объявление функции, назначенное переменной (по крайней мере, должно быть, несмотря на то, что вначале отсутствует объявление типа переменной), вторая, вероятно, связана с объявлением объекта.
Ответ 6
Они называются анонимными функциями; вы можете прочитать о них подробнее здесь:
http://www.ejball.com/EdAtWork/2005/03/28/JavaScriptAnonymousFunctions.aspx
Ответ 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)
Приветствия