2016-11-01 4 views
2

のは、私はこのコードを持っているとしましょう:「使い方」VAR 『」の代わりに』聞かせて

if (input.length >= 3) { 
    var filtered_school = _.filter(schools, function (school) { 
     return _.startsWith(school.label, input); 
    }); 
    } 
this.setState({ options: filtered_school }) 
私が使用することはできません

『私ができるように、それは範囲外見ることができないよう』しましょう「Tは。options

filtered_schoolを割り当てるしかし、私はES6でVARを使用する理由はないと聞いています。

どのように私はこのような状況で聞かせて使用することができますか?

+1

'input.length'が3以上でない場合、' filtered_school'は 'this.setState'で未定義になります。 – robertklep

+1

*他のすべての言語*のように、変数宣言を使用する予定のスコープに移動します。 JavaScriptの奇妙な 'var'セマンティクスは、標準ではなく外れ値であり、開発者に変数の宣言方法について非常に面白い考えを与えました。 – meagar

答えて

4

をちょうど外に置きます:

let filtered_school; 
if (input.length >= 3) { 
    filtered_school = // ... 
}); 

letあなたはifブロック内でそれを定義する場合は、このような状況でそれを抽出するために持っているので、それはそれの外に存在しません意味、ブロックスコープです。

4

変数を使用するスコープ内、つまりブロックifの外側に宣言します。

let filtered_school; 
if (input.length >= 3) { 
    filtered_school = _.filter(schools, function(school) { 
    return _.startsWith(school.label, input); 
    }); 
} 
this.setState({ 
    options: filtered_school 
}) 
1

letあなたが外でそれを宣言し、あなたのfilterに割り当てることができ、ES6のブロックレベルのスコープを作成します。

let filtered_school; 
if (input.length >= 3) { 
    filtered_school = _.filter(schools, function (school) { 
     return _.startsWith(school.label, input); 
    }); 
    } 
this.setState({ options: filtered_school }) 
1

letブロックスコープですので、let{}内部、または論理ブロックのどこかにある場合、それだけでそこにアクセスすることができます。あなたの例の外にアクセシブルにするには、ifの文の外に置きます。

let filtered_school; 
if (input.length >= 3) { 
    filtered_school = _.filter(schools, function (school) { 
     return _.startsWith(school.label, input); 
    }); 
} 
関連する問題