JSの基礎 - 適用範囲

スコープの問題

次のコードは、何を印刷し、その理由は?

// 情况 1 

//  情况 2
var b = 10;
var c = function b() {
  b = 20;
  console.log(b)
}
c()

// 上面两种都打印:
ƒ b() {
  b = 20;
  console.log(b)
}

B関数(関数定義された関数式)が内部定数CONST定義を使用することと等価である厳密モードでは、エラーを取得する場合は、再割り当てすることができない「キャッチされない例外TypeError:定数変数への代入を」

次の単純な変換コード、それぞれプリント10及び20、そのよう

var b = 10;
(function b() {
  b = 20;
  console.log(b)
})()

印刷10:

var b = 10;
(function b(b) {
  window.b = 20;
  console.log(b)
})(b)
var b = 10;
(function b() {
  b.b = 20;
  console.log(b)
})()

印刷20:

var b = 10;
(function b(b) {
  b = 20;
  console.log(b)
})()
var b = 10;
(function b() {
  var b = 20;
  console.log(b)
})()

ここではどのようなコードの出力があります

var a = 10;
(function () {
    console.log(a)
    a = 5
    console.log(window.a)
    var a = 20;
    console.log(a)
})()

順次出力:未定義 - > 10 - > 20

解像度:

即時実行機能、= 20 VAR Aに、ステートメントは、ローカル変数aを定義JS変数宣言機構を持ち上げるため、ローカル変数が宣言が直ちに機能の上部本体を実行するために上げ、そしてにより昇降することであろう最初のprint文は未定義に印刷されますので、割り当てが含まれていない、最後の文は、20を印刷します。

以来、世界的なVaRは次のウィンドウオブジェクトに装着され、すぐにプロンプト実行可変機能があります。
「A = 5;」この文が実行され、まだ10を割り当てwindow.a始まり、その後、ローカル変数が宣言されているので、それが生み出す効果は、ローカル変数を割り当てることです

VAR変数定義のアップグレード

var name = 'Tom';
(function() {
if (typeof name == 'undefined') {
  var name = 'Jack';
  console.log('Goodbye ' + name);
} else {
  console.log('Hello ' + name);
}
})();

出力:「さようならジャック

おすすめ

転載: www.cnblogs.com/nayek/p/11729939.html