2016-06-18 3 views

ответ

6
var func = (function(){ 
//do something 
})(); 

Этот код имеет () в конце, то есть это уже вызов функции. Значение, присвоенное func, является возвращаемым значением функции.

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

var func = function() { 
    //do something 
}; 
+0

Я хочу, чтобы это было само по себе и называть его снова, невозможно? –

+0

@AliciaBrandon Что вы подразумеваете под «init по себе и называть его снова»? – melpomene

+0

звонок сам по себе я имею в виду –

0

Просто сделайте так что вам не нужно() < - это в последней строке

var func = function(){ 

    } 
console.log(func); 
1

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

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

1

Функция используется здесь уже выполнена переменной func с (function(){})()

использовать func в качестве функции вы должны вернуть функцию

var func = (function(){ 
    return function(){ 
    // do something here 
    } 
})(); 

так можно назвать func()

jsfiddle example

+1

Это кажется более сложным, чем другие ответы без какой-либо разницы в поведении. –

+0

Спасибо, Мысль добавит больше ответов. –

1

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

В этом случае

var func = (function(){ 
    //do something 
})(); 

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

Если вы хотите, чтобы иметь возможность вызвать функцию, вы должны создать ссылку, как это:

var func = function(){ 
    //do something 
}; 

или

function func() { 
    // do something 
} 
0

После синтаксиса

(function(){ 
    // Do something 
})() 

называется Immediately Invoked Function Expression ,

Когда вы

var func = (function(){ 
//do something 
})(); 

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

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

function init(){} 
init(); 

См What is the (function() { })() construct in JavaScript? для получения дополнительной справки.

Кроме того, при определении функции, как

function func1(){} 
// or 
var func1 = function(){} 

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

Смежные вопросы