スコープの問題
次のコードは、何を印刷し、その理由は?
// 情况 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);
}
})();
出力:「さようならジャック