この記事を読んでいて、いくつか質問があります。
このコードを考慮する:
1: var a = 1;
2: function b () {
3: a = 10;
4: return;
5: function a() {}
6: }
7: b();
8: alert(a);
これは1を警告します(私の質問はなぜですか?)
この記事には、名前解決に関連することが記載されています。
名前解決 (記事によると) は、次の順序で決定されています。
1. Internal mechanisms of language: for example, in all scopes are available “this” and “arguments”.
2. Formal parameters: the functions can be named as the formal parameters, which scope is limited to the function body.
3. Function declarations: declared in the form of function foo() {}.
4. Variable declarations: for example, var foo;.
3 行目では、グローバル a の値を変更するとします。しかし、関数 a(){...} は宣言内よりも優先されます (私が正しく理解した場合)、それがアラート 1 の理由です
ps 行番号 5 を削除すると、アラート 10 が表示されます。
一般に、名前が既に定義されている場合、同じ名前を持つ別のエンティティによって再定義されることはありません。つまり、関数宣言は、同じ名前の変数の宣言よりも優先されます。しかし、これは、変数代入の値が関数を置き換えないという意味ではなく、その定義が無視されるだけです。
私はその部分を理解していません:
しかし、これは、変数代入の値が関数を置き換えないという意味ではありません
2つの質問をお願いします:
アラート1の理由を正しく理解できましたか?
上記の行はどういう意味ですか? (誤解されている部分)
ありがとう。