JavaScriptでのホスティングを1つの文で説明するのは変数であり、関数は宣言されているスコープの最上部まで引き上げられます。
私はあなたが初心者であることを前提としています。最初に適切に巻き上げを理解するために、未定義とReferenceErrorの違いを理解しました
var v;
console.log(v);
console.log(abc);
/*
The output of the above codes are:
undefined
ReferenceError: abc is not defined*/
さて、次のコードでは何が見えるでしょうか?変数と関数式がクリアされます。
<script>
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
</script>
しかし、変数と関数の両方がスコープの上部に巻き上げられていることを証明する実際の画像:
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
最初の2つのログの出力は未定義とTypeError例外:getSumは関数ではありません VARの両方のためtotalAmoとgetSumは怒鳴るようにその範囲の上に掲揚されています
<script>
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
console.log(totalAmo);
console.log(getSum(9,7));
</script>
ただし、関数宣言の場合、関数全体がスコープの最上部に引き上げられます。
console.log(getId());
function getId(){
return 739373;
}
/* output: 739373, because the whole function hoisted on the top of the scope.*/
これで、関数スコープ内で宣言された変数、関数式、関数宣言に同じロジックが適用されます。重要なポイント:それらはファイルの上部に巻き上げられません。
function functionScope(){
var totalAmo;
var getSum;
console.log(totalAmo);
console.log(getSum(8,9));
var totalAmo = 8;
var getSum = function(a, b){
return a+b;
}
}
したがって、varキーワードを使用すると、変数と関数がスコープ(グローバルスコープと関数スコープ)の上部に巻き上げられます。letとconstはどうですか、constのと聞かせてちょうどVARのように、まだ両方のグローバルスコープと関数スコープを認識しているが、CONSTと変数はまた別のスコープを知っている聞かせてはブロックスコープと呼ばれます。ブロックスコープは、forループ、if elseステートメント、whileループなど、コードのブロックがある場合は常に存在します。
constを使用してこれらのブロックスコープで変数を宣言すると、変数の宣言は、そのブロックが含まれているそのブロックの上部でのみ巻き上げられ、親関数の上部または巻き上げられるグローバルスコープ。
function getTotal(){
let total=0;
for(var i = 0; i<10; i++){
let valueToAdd = i;
var multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}
abobeの例の変数は、次のように巻き上げられます
function getTotal(){
let total;
var multiplier;
total = 0;
for(var i = 0; i<10; i++){
let valueToAdd;
valueToAdd = i;
multiplier = 2;
total += valueToAdd*multiplier;
}
return total;
}