2017-09-15 10 views

答えて

1

かなり良いです。 javascript構文は急速に進化しており、構文のバリエーションも大きくなっているため、IDEはまだ追いついています。

0

関数のパラメータを使用して構造を破壊するとどうなりますか? スプレッドオペレータは基本的には、オブジェクトのコピーを作成し、同様irrelevantキーをキャッチ:

// EDIT:追加した2つのより多くの非構造例を、私はまた、拡散演算子を持つ関数が何らかの理由でグローバル名前空間に変数をリークすることを発見しました少なくともここSOスニペットで:

let state = { 
 
    form: { 
 
    name: 'test', 
 
    phone: 123, 
 
    shift: true, 
 
    irrelevant: false, 
 
    } 
 
}; 
 

 
(function() { 
 
    let fun2 = ({form: {name, phone, shift}}) => ({name, phone, shift}); 
 
    console.log('fun2', fun2(state)); 
 
})(); 
 

 
try { 
 
    console.log(name, phone, shift); 
 
} catch (e) { 
 
    console.log('no leak'); 
 
} 
 

 
(function() { 
 
    let fun3 = state => { 
 
    let {name, phone, shift} = state.form; 
 
    return {name, phone, shift}; 
 
    }; 
 
    console.log('fun3', fun3(state)); 
 
})(); 
 

 
try { 
 
    console.log(name, phone, shift); 
 
} catch (e) { 
 
    console.log('no leak'); 
 
} 
 

 
(function() { 
 
    let fun = state => ({ 
 
    ...{name, phone, shift} = state.form 
 
    }); 
 
    console.log('fun', fun(state)); 
 
})(); 
 

 
try { 
 
    console.log('leak:', name, phone, shift); 
 
} catch (e) { 
 
    console.log('no leak'); 
 
}

+0

うん確かに、私の 'state'をする可能性のために、私は、できるだけ簡単な私の' map'機能を維持しようとしています将来変更される可能性があります。 –

+0

r 'fun4'はかなり良い解決策です –

+0

残念ながらfun4はグローバルな名前空間に漏れた変数を使用していました...それは奇妙ですね。 – Oskar

関連する問題