2013-09-05 2 views
0

아래 예제에서 약 Scope, 나는 변수가 함수로 어떻게 돌아갈 수 있는지 이해하지 못합니까? 여기서 var ff()으로 실행 중입니다. 그러나 이것은 JavaScript에서 f을 실행하는 건전한 방법입니까? 왜? var f 함수를 저장했기 때문에입니까?var에 저장된 javascript 함수로 인해 var가 함수가됩니까?

var myFunction = function() { 
    var foo = "hello"; 
    var myFn = function() { 
    console.log(foo); 
    }; 
    foo = "ddd"; 
    return myFn; 
}; 
var f = myFunction(); 
f(); // "ddd" 

감사합니다!

답변

0

이 코드 줄은 myFunction 함수를 실행하고 반환 값을 f에 할당합니다.

var f = myFunction(); 

myFunction 함수 myFn에 대한 참조를 반환한다. 결과적으로 f는 이제 myFn에 대한 참조이며 f()을 사용하여 f을 호출하려고 시도하면 참조 점이 있기 때문에 myFn이 호출됩니다.

jsFiddle Demo

다음과 같이 사용할 수있는 기능

var init = function(){ 
return { 
    hello: function(){ console.log("hello"); }, 
    world: function(){ console.log("world"); } 
}; 
}; 

의 객체를 반환 유사한 접근 방식이있다 :

var f = init(); 
f.hello(); 
f.world(); 
+0

"참조 점"이란 무엇입니까? myFunction() 함수 인 첫 번째 변수 때문입니까? – Ezeewei

+0

@Chen - 자바 스크립트에서 참조는 포인터입니다. 따라서 함수를 반환하면 해당 함수에 대한 포인터가 반환됩니다. 본질적으로 이것은 포인터가 할당되면 무엇이든지간에 'myFunction'처럼 작동한다는 것을 의미합니다. –

0

기능의 객체가 자바 스크립트, 그래서 그들은 변수에 할당 할 수 있습니다 다른 값처럼 주위로지나 갔다. 결국 그들은 처형 될 수 있습니다.

은 여기에서 일어나고있는 것은 그 myFunction반환 다음 물론 실행할 수있는 기능.

내가 당신의 예를 단순화하자

이 예에서
// function that returns a function. 
var foo = function() { 

    // declare a function, but don't run it right now. 
    var fn = function() { 
    return "bar"; 
    }; 

    // return the function object. 
    return fn; 
} 

var someFn = foo(); // function object is returned from foo() 
someFn();   // "bar" is returned 

// Which means you could also do this! 
// the first() executes foo, second() executes the function returned by foo() 
foo()()    // "bar" is returned 

foo() 함수를 반환합니다. 이 함수는 로컬 변수 someFn에 저장되고 실행됩니다.

함수를 반환하는 함수는 때때로 주위를 감싸는 데 약간 까다 롭습니다. 그러나 자바 스크립트의 가장 강력한 기능 중 하나입니다. 매우 까다로운 작업을 수행 할 수 있습니다.

+0

나는 다소 그것을 얻는다. 그러나 다소 축 늘어진다. 1. "// 첫 번째()가 foo를 실행하면 second()는 foo()가 반환하는 함수를 실행합니다."두 번째()가 someFn을 실행한다는 것을 의미합니까? 2.이 경우 'return fn'은 'fun()'와 같은 효과가 있습니까? fn() 자체가 foo()에 값을 반환하고 foo가 fn()의 값을 main 값으로 반환하기 때문에? – Ezeewei

0

일반적으로 스크립팅 언어 및 기능 프로그래밍에서. 변수와 마찬가지로 함수를 사용할 수 있습니다. 예를 들면 : 두 패러다임에서 일반적으로 (하지 않는 언어를 인식하지 못함) 함수를 매개 변수로 전달할 수 있습니다.

관련 문제