Js中的变量提升和函数提升


1.提升的概念

简单说就是在js代码执行前引擎会先进行预编译,预编译期间会将变量声明与函数声明提升至其对应作用域的最顶端。

2.变量提升

例:

console.log(a);//undefined

var a = 10;

根据变量的提升原则,var a会被优先提升到最前面编译,但赋值是在运行的时候完成的。实际上预编译的代码是:

var a;

console.log(a);

a = 10

3.函数提升

函数和变量一样,在编译阶段会被提升到当前作用域最前面编译,且函数是一等公民,优先编译函数,如:

console.log(a);//function a(){}

var a = 10;

function a(){}

console.log(a);//10

变量的声明虽然在函数声明之前,但是函数优先被编译,实际预编译的代码是:

function a(){}

console.log(a);

a = 10

console.log(a);

函数提升只会提升函数声明,而不会提升函数表达式

例:

var foo = function () {

    console.log('foo1');

}

foo();  // foo1

var foo = function () {

    console.log('foo2');

}

foo(); // foo2

function foo() {

    console.log('foo1');

}

foo();  // foo2

function foo() {

    console.log('foo2');

}

foo(); // foo2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容