2013-08-05 4 views
0

Какая разница между этими данными?Что такое использование: в JavaScript?

1- move : function(a,b){ 
. 
. 
. 

} 
2- function move(a,b){ 
. 
. 
. 
} 

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

+4

Я предполагаю, что в первом примере есть больше кода, например, литерал окружающего объекта. – adeneo

+0

http://stackoverflow.com/q/336859 может представлять интерес. –

ответ

0

Обратите внимание, что функции в Javascript сами являются объектами (и, следовательно, переменными).

Так все они сделать то же самое:

var some_object = {}; 
some_object.do_something = function() { 
    // function code 
}; 
var some_object = { 
    do_something: function() { 
     // function code 
    } 
} 
var some_object = {}; 
var some_function = function() { 
    // function code 
}; 
some_object.do_something = some_function; 
var some_object = {}; 
function some_function() { 
    // function code 
}; 
some_object.do_something = some_function; 

Только разница между теми, что, вероятно, не имеет к вам отношения, состоит в том, что функции 3 и 4 имеют функцию some_function во внешней области. В противном случае они идентичны.

4

Ваш первый пример недействителен JavaScript сам по себе. Вероятно, вы видите это как часть очень большой инициализации объекта в библиотеке; т.е .:

var Library = { 
    // ...lots of lines 

    move: function(a, b) { /*...*/ }, 

    // ...lots more lines 
}; 

В этом случае это то же самое : вы видите в любой инициализации свойств. То же самое, как это:

var object = { 
    foo: 1, 
    bar: 2 
}; 
0

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

0

(1) move обычно является свойством, и вы назначаете функцию этому свойству. Это часть другого кода, а не самостоятельная. Пример:

var myObj = { 
    sayHello: function() { 
     console.log('Hello'); 
    }, 
    sayBye: function() { 
     console.log('Bye'); 
    } 
} 

Вы можете использовать его как это:

obj.sayHello(); 
obj.sayBye(); 

(2), как вы говорите, это просто функция с именем move

Можно поэтому также 'комбинировать' как :

function myHello(){ 
    console.log('Hello'); 
} 

var myObj = { 
    sayHello: myHello, 
    sayBye: function() { 
     console.log('Bye'); 
    } 
} 
0

Колонии обычно используются для определения свойств объектов, например

obj = { 
    myProp: "String", 
    myFunc: function() { 
     console.log('hello'); 
    } 
} 

console.log(obj.myProp); 
obj.myFunc(); 

Они дополнительно используются в тройных операторах, например.

x = (y >= 2) ? "greater" : "not greater"; 

такая же, как

if (y >= 2) 
{ 
    x = "greater"; 
} 
else 
{ 
    x = "not greater"; 
} 

где ? говорит «если это правда, то», а : такой же, как «другое».

0

По существу это разница между выражением функции и объявлением функции. Вы можете прочитать об этом подробно на MDN

tl: dr; Один получает интерпретацию во время загрузки, а другие интерпретируются во время выполнения.

+0

Возможно, более точно сказать, что вы получаете [hoisted] (http://elegantcode.com/2011/03/24/basic-javascript-part-12-function-hoisting/), а другой нет (хотя переменная декларация доступна в обоих случаях). – voithos