我有一个列表,想要删除函数中的一些元素。我将要删除的元素作为结构传递给该函数。我以为我可以使用函数ListFilter
遍历列表。由于我将一个函数作为参数传递给了这个函数,我现在想知道是否可以从闭包中访问Arguments
cffunction
范围。这个闭包可以访问任何“外部”变量吗?这些必须在什么范围内存在?
<cffunction name="funcA" returntype="string">
<cfargument name="struExcludeCols" type="struct">
<cfset local.strLst = "Listel1,Listel2,Listel3">
<cfscript>
local.columnNames = ListFilter(
strLst,
function( strCol ) {
return not StructKeyExists( Arguments.struExcludeCols, strCol );
}
);
</cfscript>
<cfreturn local.columnNames>
</cffunction>
<cfdump var="#funcA( { "Listel2" = 1 } )#">
答案 0 :(得分:2)
ListFilter
内的内联函数无权访问Arguments
funcA
范围。它可以访问this
。
工作代码:
<cffunction name="funcA" returntype="string">
<cfargument name="struExcludeCols" type="struct">
<cfset local.strLst = "Listel1,Listel2,Listel3">
<cfset this.struExcludeCols = Arguments.struExcludeCols>
<cfscript>
local.columnNames = ListFilter(
strLst,
function( strCol ) {
return not StructKeyExists( this.struExcludeCols, strCol );
}
);
</cfscript>
<cfreturn local.columnNames>
</cffunction>
<cfdump var="#funcA( { "Listel2" = 1 } )#">