函数参数未定义-Javascript

时间:2018-09-21 05:35:32

标签: javascript function

我正在尝试将变量作为参数传递给函数,但是它说的是未定义的。

我认为这可能与异步或超出范围有关,但是只有在填充数据后才能调用它们的功能。

我首先将变量声明为全局变量。

oneCall函数也超出范围,我从Jquery函数中的另一个JS文件为onclick调用了该函数-div在网页之后加载,因此这就是我使用此方法的原因。

我不得不将函数置于套接字函数的范围之外,以便可以通过html访问。

在index.js中分配的变量:

var itemIdArray = []
var itemId = 0

io.of('/main').on('connection', function (socket) {

socket.on('chat message', function (msg) {
    //Add if statement to check if message is empty
    io.of('/main').to(socket.id).emit('chat message', msg);
    var message = msg
    logmsg = {
        "user": socket.id,
        msg
    }
    const request = {
        session: sessionPath,
        queryInput: {
            text: {
                text: message,
                languageCode: languageCode,
            },
        },
    };
    // Dialogflow logic
    sessionClient
        .detectIntent(request)
        .then(responses => {
            console.log('Detected intent');
            result = responses[0].queryResult;
            response = result.fulfillmentText;
            responseHappened = true;

            var responseOrderByNum = response.includes('itemId');
            if (responseOrderByNum) {
                var jsonObj = JSON.parse(response)      
                itemIdArray = jsonObj.itemId

            }

我的函数带有参数:

function oneCall(itemId, itemIdArray) {
console.log('itemIdArray' + itemIdArray)
itemId = itemIdArray[0];

}

在另一个JS文件中调用该函数:

            $('#item1Wrapper').on('click', function () {
                oneCall();
            });

2 个答案:

答案 0 :(得分:0)

var itemIdArray = []
var itemId = 0

function badCall(itemId, itemIdArray) {
  console.log('itemIdArray' + itemIdArray)
  itemId = itemIdArray[0];
}

function betterCall() {
  console.log('itemIdArray' + itemIdArray)
  itemId = itemIdArray[0];
}

//badCall();

itemIdArray = [1,2,3];

//badCall();

betterCall();

console.log( itemId );

调用函数时不传递参数。 oneCall();它们是全局的,因此您可以在函数中使用它们而不将它们作为参数传递吗?

function oneCall() {
    console.log('itemIdArray' + itemIdArray)
    itemId = itemIdArray[0];
}

答案 1 :(得分:0)

它是未定义的,因为您没有向函数传递任何参数,

function oneCall(itemId, itemIdArray) {
  console.log('itemIdArray' + itemIdArray)
  itemId = itemIdArray[0];
}

尝试调用类似的函数

$('#item1Wrapper').on('click', function () {
    console.log(itemId, itemIdArray);//make sure these variables have some values.
    oneCall(itemId, itemIdArray);
});

即使变量是全局变量,如果在具有相同名称的参数的函数中使用,这些变量也将被标识为局部变量,这些局部变量作为参数出现。您也可以尝试更改参数名称。