2017-07-01 7 views
0

resolveは、以下のコードでmyFunctionのクロージャー内で定義されていないのはなぜですか?約束の中で呼び出された関数の中でクロージャによって解決が定義されないのはなぜですか?

const myFunction =() => { 
    resolve(); 
} 

const p = new Promise((resolve) => { 
    myFunction(); 
} 

(node:1232) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: resolve is not defined 
+2

'resolve'はスコープで定義されています。 'myFunction'はそのスコープ内で定義されていません。ここに約束することは特にありません。これはスコープが常にどのように機能するかです。 – Ryan

+2

* *は*動作するプログラミング言語を知っていますか? – Pointy

+0

[機能の範囲外でJavascriptの約束を解決する]の可能な複製(https://stackoverflow.com/questions/26150232/resolve-javascript-promise-outside-function-scope) –

答えて

4

これは、JavaScriptのスコープの仕組みではないためです。スコープは字句ということです。重要なことは呼び出し側/呼び出し側の環境間の動的な関係ではなく、コードの構造と宣言のネストです。

あなたはもちろん、明示的に他の関数にresolve関数参照を渡すことができます。

const myFunction = (resolve) => { 
    resolve(); 
} 

const p = new Promise((resolve) => { 
    myFunction(resolve); 
}) 
+0

はい、私は語彙のスコープについて知っています。 myFunction2はmyFunctionの外で定義されているため、呼び出される場所は関係ありません。今明らかにされました。 – evianpring

関連する問題