2014-10-15 3 views
1

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

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
} 
(function(){}) 
+8

Используйте точки с запятой! – Bergi

+1

Возможный дубликат [Почему вам нужно вызывать анонимную функцию в одной строке?] (Http://stackoverflow.com/questions/1140089/why-do-you-need-to-invoke-an-anonymous-function -on-the-same-line) –

+0

(функция() {}) интерпретируется как аргумент первой вышеприведенной функции. Упоминание имени функции с аргументами вызывает эту функцию (выполняет). Если вы хотите другое поведение, используйте точку с запятой между двумя выражениями. –

ответ

4

Это функция

function(){ 
console.log("Hi there :D"); 
} 

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

foo = function(){ 
console.log("Hi there :D"); 
} 
foo() 

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

(function(){ 
console.log("Hi there :D"); 
})() 

Назначение также заявление, так что это работает, чтобы выполнить функцию, тоже:

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
}() 

Наконец, когда вы выполняете его, вы можете передать в качестве аргументов в этих скобках в конце:

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
}(1, 2, 3) 

Или, как в вашем примере, вы передаете в другой функции в качестве аргумента:

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
} 
(
    // This is a function being passed as an argument to the function above 
    function(){} 
) 

Вы можете сделать вещи с этой арг вы передаете в так:

var iCallMySelf = function(foo){ 
console.log("Hi there :D"); 
// foo is the function you pass in below 
console.log(foo) 
} 
(
    // This is a function being passed as an argument to the function above 
    function(){} 
) 

Надежда, что помогает!

+0

Теперь, когда я читаю это, я снова чувствую себя нубом. Большое спасибо за подробное объяснение! –

1

Если вы не хотите назвать это автоматически вы должны поставить; как

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
}; 
(function(){}) 

благодаря оборачивать функции ниже его получить вызов автоматически

всякий раз, когда у положить() после того, как функции, которую он называется так вот, если и использовать точку с запятой в следующем (функция() {}) является не используется iCallMyself

, но если и делать, как этот

var myFun = function() 
{ 
    console.log('Hii'); 
}; 
var x = myFun(); 

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

также, подобным образом будет называться

var myFun = function() 
{ 
    console.log('Hii'); 
}; 
var x = myFun(function(){}); 

и в вашем вопросе у используется та же ,, так что, когда я пишу функцию при определении хи можно сделать

var x = function(){console.log('Hii')}(function(){}); 

это как ваш вопрос был сделан ... в вашем вопросе iCallMyself не является функцией печати «Привет там: D», но он работает как переменная, а также не сохраняет возвращаемое значение функции, чтобы обеспечить значение iCallMyself вашей функции следует называть иначе, он не получит никакой ценности,

iCallMyself будет оставаться неопределенным, даже если его не функция может попробовать этот

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
} 
(function(){}) 
console.log(iCallMyself); 

только его в иллюзию JavaScript, что мы думаем, что iCallMyself функция, но здесь его не

также в вашем вопрос, если u вызывает iCallMyself(); и будет получать сообщение об ошибке, потому что его не функция

как

попробовать это

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
} 
(function(){}) 

iCallMyself(); 

это даст ошибку, что не определено не является функцией, поскольку она не является функцией, кажется, только быть, но не на самом деле.

Так в чем же логика положить точку с запятой;

, когда у положить точку с запятой

var iCallMySelf = function(){ 
console.log("Hi there :D"); 
}; 
(function(){}) 
iCallMyself(); 

Теперь линия (функция() {}) не связано с iCallMyself это обернутую функцию и ничего теперь и может вызывать iCallMyself функция()

var x = function(){}(); 

так что теперь функция() {}() является исполняемым всякий раз, когда у вернуть его в переменной

var x = function(){}; 

и функция() {} не исполняемыми вар, то переменная будет содержать функцию

var x = function(){};() 

и функция() {};() теперь() не является необходимым

0

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

Если вы позвоните позже iCallMySelf(), он сделает это снова. Если вы iCallMySelf(blank), он все равно это сделает. В javascript для функции не требуются никакие параметры, и любые определенные параметры по-прежнему являются необязательными, но должны быть заданы значения, если они пусты.

0

Это обрабатывается как

var iCallMySelf = function(){console.log("Hi there :D");} (function(){}); 
//    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ 
//     a function expression    and another one 
//              ^^^   ^^ 
//        a call of the first function, passing the second 

Всегда используйте точку с запятой!

var iDontCallMySelf = function(){ 
    console.log("Hi there :D"); 
}; 
(function(){}); 

Или в декларациях крайней мере использовать функции:

function iDontCallMySelf(){ 
    console.log("Hi there :D"); 
} 
(function(){}); 
0

Если вы хотите создать себя выполнение функции в JavaScript это будет выглядеть следующим образом:

(function(param1, param2, ..) { 
    // some code .. 
})(param1, param2, ..); 

Ваш код содержит сам после чего следуют ():

var iCallMySelf = function() { 
    console.log("Hi there :D"); 
}(function(){}) 

function(){} in () - анонимная функция, передаваемая как параметр функции iCallMySelf.

Если вы не хотите называть эту функцию добавить ; после }:

var iCallMySelf = function() { 
    console.log("Hi there :D"); 
}; 

(function(){}) 
Смежные вопросы