2016-06-30 2 views
-2

webpackモジュールで値を返していますが、関数外では使用できません。私が愚かな疲れた間違いをしていない限り、おそらく私はモジュールの仕組みについて根本的なものを見逃していると思います。誰かが私を教えてくれますか?webpack ES6の関数から値を返す - スコープ

function getProjectID() { 
    const project_id = document.getElementById('project-title') 
           .getAttribute('data-project-id'); 
    console.log("Project id inside is" + project_id); //Logs out the correct value 
    return project_id; 
} 

getProjectID(); 

console.log("Project id outside is" + project_id); //Uncaught ReferenceError: project_id is not defined 
+0

module.exportsはが設定されていますか?これはあなたが投稿したサンプルコードにはありません。 – bflemi3

+0

しかし、さらに...ここには範囲の根本的な誤解があるように見えます。 'console.log( '...' + project_id)を呼び出すと、' project_id'変数は未定義です。 'console.log'呼び出しで' getProjectID'を呼び出す必要があります。 – bflemi3

+1

'return'は、*変数*が突然呼び出し元のスコープに現れることを意味しません。 *値*だけが 'return'edされています。 – deceze

答えて

2

JavaScriptは関数スコープを持っているので、それが宣言のWHEREそれはだからproject_idは、関数外にアクセスできるようになるだろうされていません。

それにアクセスするには、戻り値を割り当てます。あなたのコードに基づいて

const project_id = getProjectID(); 
+0

彼がes5を書いている場合、 'const'は定義されたキーワードではありません。例外がスローされます。 – bflemi3

+1

彼は元の質問に 'const'を使っています。だから私は彼がES6を使用していると仮定しています。 – sma

0

、それはあなたが実際に返すようにしたいが、私はあなたがの値を返すモジュールをしたい推測しているものを伝えるのは難しいの質問data-project-id属性は#project-titleです。

私の前提が正しければ、module.exportsを実際にgetProjectID機能に設定する必要があります。

getProjectId.js

module.exports = function getProjectID() { 
    return document.getElementById('project-title').getAttribute('data-project-id'); 
} 

注:あなたが問題ではないとして匿名かmodule.exportsは関数を定義しますが、わかりやすくするために、私は名前を維持するかどうか。

someOtherFile.js

var getProjectId = require('getProjectId'); 
console.log('Project id is... %s', getProjectID()); 
関連する問題