2016-06-30 33 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'並不意味着*變量*會突然出現在調用者的範圍內。只有*值*正在返回。 – deceze

回答

2

JavaScript有功能範圍,所以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());