我正在尝试将变量作为参数传递给函数,但是它说的是未定义的。
我认为这可能与异步或超出范围有关,但是只有在填充数据后才能调用它们的功能。
我首先将变量声明为全局变量。
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();
});
答案 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);
});
即使变量是全局变量,如果在具有相同名称的参数的函数中使用,这些变量也将被标识为局部变量,这些局部变量作为参数出现。您也可以尝试更改参数名称。