2017-05-31 12 views
6

Edge/15.15063を実行しています。 'Can I Use' says const should work.Edge 15の開発ツールでconstが動作しない

実行:

その後
const x = 'woo' 

console.log(x) 

戻り

'x' is undefined 

スクリーンショット:

enter image description here

なぜconstが動作しないのですか?

+1

ラップすると動作しますか?(function(){const x = 'woo'; console.log(x);})(); '? –

+0

コードブロックに入れるとどうなりますか? '{const x = 'woo'; console.log(x); } '? – evolutionxbox

+0

@ jared:ラップ時に動作します – mikemaccana

答えて

2

私は、エッジコンソールがカバーlike other implementations didの下にwithステートメントを使用していると思われます。これはvar sおよびeven function declarationsグローバルスコープに外に掲揚されているが、letを説明するだろうとconstはブロックスコープにロックされます。

with (…) { 
    const x = 'woo' 
} 
// next input: 
with (…) { 
    console.log(x) // obviously undeclared 
} 

は、単一の評価では、複数行モードでそれらを入力してみてください - そこに彼らが動作するはずです。

しかし、コンソールは実際にと感じているので、はグローバルスコープ内のものを評価するようにバグを報告することもできます。

+1

その答えの最後のコメントにはかなりのことが書かれています:「数週間前、Chromeでコンソールの実装をブロックからシンボル魔法に移動しました。機能:) " –

+0

@ JaredSmithハ、完璧!それを読んで気にしなかった、私は実装のアプローチを示したものをリンクしたいだけでした。 – Bergi

1

私はこれを考え出したと思いますが、これは答えと同じくらい推測されます。しかし、コメントのためにはあまりにも長い。私は何が起こって思い

constletdo not create暗黙のグローバルはvarと同じ方法で、トップレベルのスコープで使用した場合ということです。 constletで作成されたトップレベル変数はグローバルですが、グローバルwindowオブジェクトのプロパティではありません。

コンソールで作成された変数にアクセスするための暗黙のwindowプロパティの作成にMSコンソールが頼っている場合、constletは機能しません。

私はクローム開発ツールの内部の仕組みがわからないけど、コンソールで実行されるコードのための無名関数のラッパーを作成するようだ:

throw new Error; 

VM679:匿名で1不明なエラー : 1:7

(function() { throw new Error; })(); 

VM759:で1つの不明なエラー nonymous:匿名で21 :1:1:33

私はここで起こって他のサンドボックスがある場合、私は必ずしもそれにドキュメントをたくさん見つけることができませんでしたか不明です。

+0

"* MSコンソールが、変数にアクセスするための暗黙のウィンドウプロパティの作成に依存している場合*"なぜですか? – Bergi

+0

@Bergi IDKそれは私にもダムに聞こえる。私が言ったように、投機は、コメントのためには長すぎる。 –

関連する問題