4

このMozillaの記事で、私は次のように読みました。

JavaScriptの変数に関するもう1つの珍しい点は、例外を取得せずに、後で宣言された変数を参照できることです。この概念は巻き上げとして知られています。JavaScriptの変数は、ある意味で「持ち上げられた」、つまり関数またはステートメントの先頭に持ち上げられます。ただし、まだ初期化されていない変数は、未定義の値を返します。

そして、いくつかの例:

/**
 * Example 1
 */
console.log(x === undefined); // logs "true"
var x = 3;


/**
 * Example 2
 */
// will return a value of undefined
var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

上記の例2は、次のように解釈されます。

var myvar = "my value";

(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();

少なくとも私が伝統的に単語の定義を解釈しているという意味では、「持ち上げられている」ものは何も見えません。変数undefinedは宣言されるまでのようです。どのような意味で「後で宣言された変数を参照する」ことができますか?

4

1 に答える 1

7

使用varすると、関数宣言の先頭に「持ち上げられ」ます。2番目の例をもう一度見てみましょう。

var myvar = "my value";

(function() {
  console.log(myvar); // undefined
  var myvar = "local value";
})();

最初var myvar = 'my value'に宣言される方法に注意してください。次に、関数スコープ内でが呼び出されます。結果は「未定義」です。なんで?それがコードの順序であるため、「私の価値」になると思うでしょう。console.log(myvar)

var myvar関数スコープのローカル変数は引き上げられているため、定義されていません。これは基本的に次のような関数を書くことと同じです。

(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = "local value";
})();
于 2013-02-11T05:01:45.783 に答える