2014-09-28 2 views
-1

То, что я пытаюсь, это просто напечатать сообщение на консоли, вызвав функцию немедленно. Вот пример:Почему мой JS-код не работает?

function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3); 

PS

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

ответ

1

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

(function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3)); 

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

(function (a){ 
    return function (a){ 
     console.log('msg' + a); 
    } 
}(3)(7)); 

Это пример (3) (7) написана простыми словами:

var f1 = function (a){ 
    console.log(a); 
    return function (a){ 
     console.log('msg' + a); 
    } 
} 

var inheritFunction = f1(3); // Calling f1(3) won't return what you are looking for. 
inheritFunction(7); // Returns the original value 
+0

Очень интересный пример. Но я не понимаю разницы между ними. Я имею в виду эту разницу между '} (3));' и '} (3) (7));' – barbara

+0

О, я вижу сейчас. Спасибо за ваше объяснение. – barbara

+0

Рад помочь. Вы учитесь в Codeschool? – Rod

6

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

(function() { 
    return function(a) { 
     console.log('msg' + a); 
    } 
})()(3); 

или, возможно, вы имели в виду:

(function someFunc(a) { 
    console.log('msg' + a); 
})(3); 

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

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

+0

Первый пример. – barbara

+0

Я собираюсь прекратить фиксировать ваш пост, теперь (и только вы проголосовать за вас) ...;) –

1

Это может работать:

(function(a) { 
    return function(a) { 
    console.log('msg' + a); 
    } 
})(3)(5); 

Это говорит msg5, и вы поймете, почему;)