在此方法中,当我在while循环上方声明parentCampaignId时,不再可以在onClick方法中访问它。但是,如果我在while内声明,则可以在onClick方法内访问变量。这是为什么?为什么范围取决于while循环?
我问了我的同事和一位前辈。他们不知道。我也尝试使用Google搜索,但没有找到任何解决方案。
getBreadcrumbs() {
let breadCrumbStack = [];
let parentCampaign = this.getParentCampaign(this.props.campaign.get('parent_id'));
while(typeof parentCampaign !== 'undefined') {
let parentCampaignId = parentCampaign.get('campaign_id');
breadCrumbStack.unshift({
onClick: (() => {
window.location.href = '/cd/campaign/manage/campaign/'+parentCampaignId; # Since parentCampaignId declared inside while it is accessible
}).bind(this),
label: parentCampaign.get('name')
});
parentCampaign = this.getParentCampaign(parentCampaign.get('parent_id'));
}
return breadCrumbStack;
}
getBreadcrumbs() {
let breadCrumbStack = [];
let parentCampaign = this.getParentCampaign(this.props.campaign.get('parent_id'));
let parentCampaignId = parentCampaign.get('campaign_id');
while(typeof parentCampaign !== 'undefined') {
breadCrumbStack.unshift({
onClick: (() => {
window.location.href = '/cd/campaign/manage/campaign/'+parentCampaignId; # Now parentCampaignId declared outside while and it is no longer accessible
}).bind(this),
label: parentCampaign.get('name')
});
parentCampaign = this.getParentCampaign(parentCampaign.get('parent_id'));
}
return breadCrumbStack;
}
我希望在两种情况下都能正常工作,但在第二种情况下却无法工作(当parentCampaignId在while循环外部声明时)。
答案 0 :(得分:0)
在kubectl
中,您定义一个函数,该函数使用变量
onClick
,不是此函数的局部变量。
因此,JavaScript会接受该变量并放入
与函数一起放在一个闭包( google ::)中)。
在onClick函数被执行时,
parentCampaignId
充满了
变量window.location.href
当时具有 。
现在,在您的第一个示例中,每次迭代都会创建一个新的parentCampaignId
变量(通过循环中的parentCampaignId
关键字 ),然后将其包含在闭包中。
它最初获得了您期望的价值,并且从未改变。
因此,此let
可以按预期工作。
但是,在第二个示例中,onClick
被创建一次,
在循环之外。 parentCampaignId
中只包含一个
每个parentCampaignId
函数的关闭。
并且在执行onClick
函数时
它们都将具有相同的onClick
变量,其中包含
值parentCampaignId
返回时的值。
答案 1 :(得分:0)
只是一个猜测。我猜您的第一个parentCampaignId
是空的,并且在循环结束时您没有更新parentCampaignId
,所以parentCampaignId
永远都空着,您认为无法访问。
可以使用console.log
来查看第一个parentCampaignId
是什么吗?