在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之后被定义,依然会提升到该作用域的最顶端,而且高于变量提升。
时间: 2024-11-06 23:55:17