Чтобы описать хостинг в javascript одним предложением, переменные и функции поднимаются в верхнюю часть области, в которой они объявлены.
Я предполагаю, что вы новичок, чтобы правильно понять подъем, мы сначала поняли разницу между undefined и ReferenceError.
var v;
console.log(v);
console.log(abc);
что мы видим в приведенном ниже коде? переменная и выражение функции убираются.
<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));
Вывод первых двух журналов не определен, а 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;
}
Теперь та же самая логика применяется к тем варибалам, выражениям функций и декларациям функций, объявленным внутри функциональной области. Ключевой момент: они не будут подняты наверх файла ;
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 и let по-прежнему осведомлены о глобальной области видимости и области действия, как и var, но переменные const и let также осведомлены о другой области, называемой заблокированной областью. область видимости блока присутствует всякий раз, когда есть блок кода, например цикл for, оператор if else, цикл while и т. д.
Когда мы используем const и let для объявления переменной в этой области видимости блока, объявление переменной будет поднято только вверху того блока, в котором она находится, и не будет поднято вверху родительской функции или вершины глобальная область видимости, которую он поднимает.
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;
}