js变量提升与函数提升

Posted 落落月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js变量提升与函数提升相关的知识,希望对你有一定的参考价值。

在es6之前,js语言并没有块级作用域,即{}形成的作用域,只有全局作用域和函数作用域,所谓的提升,即是将该变量的声明或者函数的声明提升,举个例子

console.log(global); //undefined
var global = 111;
console.log(global);//111

显然,上面代码处于一个全局的作用域中,在该作用域中使用var声明了一个global变量,其实际的声明过程如下:

var global;
console.log(global); //undefined
global = 111;
console.log(global) //111

上面可见,var global的变量声明被提升到第一行了,因此第二行中的输出显示为undefined,第三行才对global变量进行赋值操作;

因此,需要注意的:

1、变量的声明在该作用域中,会被提升到出函数声明的最高级;

2、需要区分变量的声明变量的赋值是两种不同行为,需要分开处理;

 

函数提升:

函数常见的创建有两种方式:

1、函数声明;

function func(){
  ......  
}

  

 

2、函数表达式

var func = function() {}

然而,只有第一种函数声明的方式才有函数提升的作用。

 

举个例子:

console.log(func());//1
function func() {
  return 1;      
}

也就是说,就算函数在console之后被定义,依然会提升到该作用域的最顶端,而且高于变量提升。

以上是关于js变量提升与函数提升的主要内容,如果未能解决你的问题,请参考以下文章

JS预解析与变量提升

js预解析

JS执行顺序-函数声明提升匿名函数函数表达式

一个例子,变量提升和函数提升就是这么简单!

作用域与变量提升

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