JavaScript方法传递参数

时间:2016-12-01 15:43:24

标签: javascript methods parameters dojo

8年前我使用dojo,所以我对dojo 1.7+非常新。我想定义一个带参数的方法,但它对dojo模块(lang)也有要求。所以我尝试了以下内容。

 <script>
    function fillReportTable(repId) {
        require(['dojo/_base/lang'], function(lang) {

             //just example calls to lang..
             var obj = { a:"b", c:"d" };
             var thing = lang.clone(obj);
            repId = repId + 1;
        });

        return repId;
    };

    alert(fillReportTable(13))
</script>

alert(fillReportTable(13))显示整个函数定义而不是数字14.我缺少什么?

1 个答案:

答案 0 :(得分:1)

如果您要使用dojo,那么几乎所有都需要AMD module,可能只需vanilla Javascipt。因此,您可以将您的功能转换为AMD module并且很容易

myApp / fillReportTable.js

define(['dojo/_base/lang'],function (lang) 
{                
    return function fillReportTable(repId) {
        var obj = { a:"b", c:"d" };
        var thing = lang.clone(obj);
        return repId + 1;
    }
}); 

然后,你可以require

require(["myApp/fillReportTable"], function(  fillReportTable )
{
    console.log(fillReportTable(123));
});

但如果继续使用您的方法,则可以使用Promise

解决此问题
function fillReportTable(repId){
   return new Promise(function(resolve){
        require(['dojo/_base/lang'],function (lang){                
            var obj = { a:"b", c:"d" };
            var thing = lang.clone(obj);
            resolve(repId + 1);
        });
   });  
};

如何使用

fillReportTable('Hello World').then(function(repId){
    console.log(repId);
});

请注意,PromiseECMAScript6 feature

希望有所帮助