初始化前无法访问“variable_name”

Posted

技术标签:

【中文标题】初始化前无法访问“variable_name”【英文标题】:Cannot access 'variable_name' before initialization 【发布时间】:2019-10-12 13:55:54 【问题描述】:

使用$: 语法声明反应变量时,会出现以下错误。

Cannot access 'variable_name' before initialization

代码如下:

App.svelte

<script>
    import  ledzep, redhotchilis  from './data.js'
    
    $: bandmembers = [...ledzep, ...redhotchilis]
    
    let namesWithA = bandmembers.filter(d => 
            if (d.indexOf('a') > 0)                
                return true;
            
        else 
            return false
        
    )
    
</script>
<h2>Band Members</h2>
<ul>
#each bandmembers as member
    <li>member</li>
/each
</ul>

<h2>Members with "A" in their names</h2>
<ul>
#each namesWithA as member
    <li>member</li>
/each
</ul>

data.js

export const ledzep = ["Jimmy Page", "John Bonham", "Robert Plant", "John Paul Jones"]
export const redhotchilis = ["Anthony Kiedis", "Flea", "Chad Smith", "Josh Klinghoffer"]

【问题讨论】:

【参考方案1】:

当您使用$: 分配变量时,您不能将它们分配为使用letconstvar 声明的其他变量的一部分。

当你使用$:进行赋值时,你只能在使用$:赋值的其他变量中使用它们。在上面发布的代码中,您需要更改以下几行:

let namesWithA = bandmembers.filter(d => 
            if (d.indexOf('a') > 0)                
                return true;
            
        else 
            return false
        
    )

到以下:

$: namesWithA = bandmembers.filter(d => 
            if (d.indexOf('a') > 0)                
                return true;
            
        else 
            return false
        
    )

我花了一段时间才弄清楚这一点,只是想与任何其他开始使用这项新技术的 Svelte 新手分享。

【讨论】:

请注意,在此示例中,您根本不需要使用 $:,因为 ledzepredhotchilis 不是反应变量(从另一个模块导入的值被带到保持不变)

以上是关于初始化前无法访问“variable_name”的主要内容,如果未能解决你的问题,请参考以下文章

Graphql创建两个查询之间的关系。初始化前错误无法访问

初始化前不能访问“变量”

ReferenceError:在初始化之前无法访问词法声明`X'

ReferenceError:在初始化猫鼬之前无法访问“用户”

在量角器中初始化之前无法访问“元素”

无法在字段初始化程序中访问“this”以读取“assists”[重复]