提升是用来描述变量和函数移动到其(全局或函数)作用域顶部的术语。
为了理解提升,需要来了解一下执行上下文。执行上下文是当前正在执行的“代码环境”。执 行上下文有两个阶段:编译和执行。
编译-在此阶段,JS引荐获取所有函数声明并将其提升到其作用域的顶部,以便我们稍后可以 引用它们并获取所有变量声明(使用var关键字进行声明),还会为它们提供默认值:undefinedo
执行——在这个阶段中,它将值赋给之前提升的变量,并执行或调用函数(对象中的方法)。
注意:只有使用var声明的变量,或者函数声明才会被提升,相反,函数表达式或箭头函数, let和const声明的变量,这些都不会被提升。
假设在全局使用域,有如下的代码:
console. log(y);
y = 1;
console. log(y);
console. log(greet("Mark"));
function greet(name){
return ‘Hello ‘ + name + ‘!1 ;
}
var y;
上面分别打印:undefined, 1, Hello Mark! 。
上面代码在编译阶段其实是这样的:
function greet(name) {
return ‘Hello ‘ + name + ‘!’;
}
var y; // 默认值 undefined
//等待“编译”阶段完成,然后开始“执行”阶段
/*
console. log (y);
y = 1;
console. log (y);
console. log(greet("Mark"));

编译阶段完成后,它将启动执行阶段调用方法,并将值分配给变量。
function greet(name) {
return ‘Hello ‘ + name + ‘!’;
}
var y;
//start "execution" phase
console.log(y);
y = 1;
console. log(y);
console. log(greet("Mark"));

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.