会否是参数作用域问题
当前我有一个函数:这个函数主要是在使用iview的Table组件进行自定义模版时写的一个用来生成Select的方法,其中h函数
是vue
的createElement函数
,目前遇到的问题是:我在函数进入的地方进行了console
可以打印出dataList
对象(不为空),但是在数组里面的lambda函数参数dataList
却是为空。感觉像是变量作用域的问题,不知如何解决,期待大佬~
//Select EleGene
function commonGenSelect(h,c,dataList){
//此处的dataList不为空
console.log(dataList[0].title)
return h("Select",{
props:{
name:'constraintColType'
}
},[
(h,c,dataList)=>{
//此处的dataList为空
console.log("commonGenCheckBox >>"+dataList)
let OptionArr = new Array();
dataList.forEach(colKV => {
OptionArr.push(h("Option",{
props:{
label:colKV.title,
value:colKV.val
}
}))
});
return OptionArr;
}
])
}
(┬_┬),已找到原因,待时间过了,再来补充答案
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
(┬_┬),在胡乱摸索中把这问题给解决了,其实只是自己对
lambda
的理解不足及使用错误有关。问题中的函数参数的前两个h、c
分别是iview的Table组件自定义模版render
时的参数,我自定义了一个函数,包含这两个参数,同时自己传多一个数组。我在内部准备使用这些参数,本来这些参数的作用域已经是整个函数commonGenSelect
了,但是我在后续的代码中使用了匿名函数,同时异想天开的将这三个参数作为匿名函数的参数传入,不过此时的匿名参数已经相当于定义了一个新的函数出来,且没有传入实参,导致在内部代码报错undefinded
。解决的方法有两种:一种是直接将匿名函数的参数直接去掉,在匿名函数代码块中使用的变量将是存在于
commonGenSelect
整个函数作用域内的,此时这些变量就不会为空第二种方法是,匿名函数被定义成三个参数但是没有被传入实参,此时我们可以加多一个调用的步骤,在匿名函数后进行传参及调用
最后,这个问题也是让我想到
匿名参数在定义的时候,要么挂钩到对应的已有函数中,如
要么在定义出自己的匿名参数后,记得后续进行传参来调用,否则匿名函数的参数将是空的