47

Вопрос по javascript – Являются ли именованные функции предпочтительнее анонимных функций в JavaScript? [Дубликат]

Possible Duplicate:
JavaScript: var functionName = function() {} vs function functionName() {}

Есть два возможных метода извлечения функции в Javascript:

var foo = function() { ... }

Это немного надумано; Другой распространенный шаблон:

var foo = {
   baz: 43,
   doSomething: function() {
       // ...
   }
}

против

function foo() { 
  // ... 
}

Есть ли явная причина отдать предпочтение одному или другому?

Error: User Rate Limit Exceeded

Apr 10, 2012, 12:40 AMот

@amnotiam: Согласен. Проголосовал за закрытие.

Apr 10, 2012, 2:32 AMот

Это хорошая статья<a href="http://kangax.github.com/nfe/" rel="nofollow noreferrer">kangax.github.com/nfe</a>

Apr 10, 2012, 1:04 AMот

4ответа

10

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

function() { ... }Error: User Rate Limit Exceededfunction expressionError: User Rate Limit Exceeded2 или же[4,5]Error: User Rate Limit ExceededvalueError: User Rate Limit Exceededvar foo=function(){ ... }Error: User Rate Limit Exceeded

function foo() { ... }Error: User Rate Limit Exceededvar foo=function(){...}Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit Exceeded:

function test() {
    foo(); // TypeError "foo is not a function"
    bar(); // "this will run!"
    var foo = function () { // function expression assigned to local variable 'foo'
        alert("this won't run!");
    }
    function bar() { // function declaration, given the name 'bar'
        alert("this will run!");
    }
}
test();

Error: User Rate Limit Exceededin theoryError: User Rate Limit Exceeded

function test() {
    var foo;//foo hoisted to top
    var bar=function(){//this as well
        alert("this will run!");
    }

    foo(); // TypeError "foo is not a function"
    bar(); // "this will run!"
    var foo = function () { // function expression assigned to local variable 'foo'
        alert("this won't run!");
    }
}

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceededfunction foo() {...}Error: User Rate Limit Exceeded

(function foo() { return 1; })();// 1
foo; //ReferenceError: foo is not defined

Error: User Rate Limit Exceeded


Summary var foo=function(){ ... }Error: User Rate Limit Exceededfoo(){ ... }Error: User Rate Limit Exceeded

please use function expressions( var f=function(){...}Error: User Rate Limit Exceeded


Error: User Rate Limit Exceeded

Error: User Rate Limit Exceededkinda sortaError: User Rate Limit Exceeded

var foo = {
    baz: 43,
    doSomething:function() {
        ...
    }
}

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

{ name1: val1, .... namek:valk }

Error: User Rate Limit Exceededvar obj={ name1: val1, .... namek:valk }Error: User Rate Limit Exceeded

obj.name1==val1;
obj['name1']==val1;// x['y'] is the same thing as x.y 
...
obj.namek==valk;

Error: User Rate Limit Exceeded

Error: User Rate Limit ExceededError: User Rate Limit ExceededError: User Rate Limit Exceeded

2

Error: User Rate Limit Exceeded

  • names for meta analysis. functionInstance.name will show you the name.
  • Far more importantly, the name will be printed in stack traces.
  • names also help write self documenting or literate code.

Error: User Rate Limit Exceeded

  • IE has memory leaks for NFE

Error: User Rate Limit Exceeded

71

Все сводится к тому, где вы объявляете свои функции; Подъемный.

Error: User Rate Limit Exceeded

function foo() {
    bar();
    var x = 1;
}

Error: User Rate Limit Exceeded

function foo() {
    var x;
    bar();
    x = 1;
}

Error: User Rate Limit Exceeded

function test() {
    foo(); // TypeError "foo is not a function"
    bar(); // "this will run!"
    var foo = function () { // function expression assigned to local variable 'foo'
        alert("this won't run!");
    }
    function bar() { // function declaration, given the name 'bar'
        alert("this will run!");
    }
}
test();

Error: User Rate Limit Exceeded

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

foo(); // TypeError "foo is not a function"
bar(); // valid
baz(); // TypeError "baz is not a function"
bin(); // ReferenceError "bin is not defined"

var foo = function () {}; // anonymous function expression ('foo' gets hoisted)
function bar() {}; // function declaration ('bar' and the function body get hoisted)
var baz = function bin() {}; // named function expression (only 'baz' gets hoisted)

foo(); // valid
bar(); // valid
baz(); // valid
bin(); // ReferenceError "bin is not defined"

Error: User Rate Limit Exceededfunction declaration иначе использоватьexpressionError: User Rate Limit Exceededfunction expressions.

названныйfunction expressionsError: User Rate Limit Exceededanonymous акаstack trace.

1

Error: User Rate Limit Exceeded

Named vs anonymous?

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

Function declaration vs function expression?

Error: User Rate Limit Exceeded

Error: User Rate Limit Exceeded

RelatedQuestions