このコードをchromeでテストしました56javascriptで関数内でNaNを上書きできるのはなぜですか?
この奇妙なコードが見つかりました。
私はコンソールにconst NaN = '';
をこのコードを入力する場合、私は私が期待されるこのメッセージが表示されました。 Uncaught SyntaxError: Identifier 'NaN' has already been declared at <anonymous>:1:1
しかし、私は関数内のNaNキーワードを上書きしている場合はjavascriptのキーワードは、関数でオーバーライドすることができましょう、なぜ、この
function a(){ const NaN = ''; return NaN; }
のように、それは空の文字列に''
を返しますか?
?'NaN'が既にグローバルスコープで定義されている場合、グローバル定義はそれをシャドウすることはできませんが、ローカル定義はクロージャを作成し、同じ名前の新しい識別子のための"スペース "を作成します。 –
NaNはグローバルプロパティであり、キーワードではありません。 –
'var a = 1;を実行できないのと同じ理由があります。 const a = 2; 'しかし、あなたは' var a = 1;関数b(){const a = 2; } '。 'const'変数を再定義することはできません。関数の中では、それは異なる変数になります。 – JJJ