2012-09-10 4 views
4

가능한 중복 : 나는 자바 스크립트의 "모범 사례"를 이해하려고 시도하고
JavaScript: var functionName = function() {} vs function functionName() {}
What is the difference between a function expression vs declaration in Javascript?javascript의 변수에 함수를 지정해야하는 이유는 무엇입니까?

. 나는 인사 변수에 기능을 할당해야하는 이유

이 코드는 jqfundementals.com

// create a function that will greet a person, 
// and assign the function to the `greet` variable 
var greet = function(person, message) { 
    var greeting = 'Hello, ' + person + '!'; 
    log(greeting + ' ' + message); 
}; 

greet('Jory', 'Welcome to JavaScript'); 
greet('Rebecca', 'Thanks for joining us'); 

에서입니까?

내 첫 충동이처럼 작성하는 것입니다 :이 두 가지 구현의 차이점은 무엇

function greet (person, message) { 
    var greeting = 'Hello, ' + person + '!'; 
    log(greeting + ' ' + message); 
}; 

입니까?

+3

나는 이것이 전에 물어 본 느낌이 있습니다. –

+0

우수, 링크에 대한 @Quentin 덕분에 –

+0

이러한 링크는 피상적 인 질문에 답하는 동안 "나는 왜 이렇게합니까"라는 대답을하지 않은 채로 남겨두고 이것이 중복으로 간주되어서는 안된다고 생각합니다. @ NathanKoop 당신도 그것에 동의합니까? – delnan

답변

-2

실제 차이점은 없지만 var 형식을 사용하면 재귀 함수가있는 경우 사용하기 전에 선언 할 수 있습니다.

간단한 예 :

var func1, func2; 

func1 = function (count) { 
    count = count - 2; 
    if (count > 0) { 
     func2(count); 
    } 
} 

func2 = function (count) { 
    func1(count + 1); 
} 

func1(10); 

function func1 (count) { 
    count = count - 2; 
    if (count > 0) { 
     func2(count); 
    } 
} 

function func2 (count) { 
    func1(count + 1); 
} 

func1(10); 

하지만 너무 완벽하게 허용됩니다. 통역사는 가변 호이스트 때문에 이전 통역사와 교환합니다.

+1

올바르지 않습니다. function * statements * (함수 * 표현식 *과 다른)은'function name .. '으로 선언되며,'name'은'var name' 변수와 동일한 범위와 권위를가집니다. –

+1

함수 선언은 호이 스팅 (hoisting)의 대상이되며, 함수가 다른 함수 내에서 호출되면 런타임에 파싱 된 시간이 아닌 해당 함수가 검색되므로 추론이 이중으로 잘못됩니다. – Quentin

+1

JavaScript에서 사용하기 전에 선언하면 가변 호이 스팅이 대신 적용됩니다. 당신의 주장은 무엇입니까? – Halcyon

1

이전의 기능을 호출 할 수있는 호이 스팅을 제외하고는 해당 스 니펫간에 차이가 없습니다. 정의 이전. 그러나 이것은 당신을 데우는 단순한 예일뿐입니다. 실제로 사람들은 이러한 함수를 변수에 할당하지 않고 직접 다른 함수에 전달합니다. 그렇지 않으면 표현 컨텍스트에서 사용합니다. 또는 그들은 저장할 기능을 동적으로 결정합니다. 아니면 정말로 다른 것.

관련 문제