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之后被定义,依然会提升到该作用域的最顶端,而且高于变量提升。

posted @ 2017-08-31 14:09  落落月  阅读(169)  评论(0编辑  收藏  举报