JavaScript 什么是提升?
提升是用来描述变量和函数移动到其(全局或函数)作用域顶部的术语。
为了理解提升,需要来了解一下执行上下文。执行上下文是当前正在执行的“代码环境”。执行上下文有两个阶段:编译
和执行
。
编译-在此阶段,JS 引荐获取所有函数声明并将其提升到其作用域的顶部,以便我们稍后可以引用它们并获取所有变量声明(使用var
关键字进行声明),还会为它们提供默认值:undefined
。
执行——在这个阶段中,它将值赋给之前提升的变量,并执行或调用函数(对象中的方法)。
注意:只有使用var
声明的变量,或者函数声明才会被提升,相反,函数表达式或箭头函数,let
和const
声明的变量,这些都不会被提升。
假设在全局使用域,有如下的代码:
console.log(y); y = 1; console.log(y); console.log(greet("Mark")); function greet(name){ return 'Hello ' + name + '!'; } 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"));
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » JavaScript 什么是提升?
码云笔记 » JavaScript 什么是提升?