作用域的提升

Posted 鱼鱼疯

tags:

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

 在JS中,因为浏览器的解析式自上而下的,所以经常会涉及到函数或者function的作用域问题,这里简单的说明已ixa

一 函数的作用域提升

举例   :

function f2(){
console.log(i)
};
f2();
var i=10;


此时的结果为undefinded,因为函数作用域的提升,此时的可以写成下面的方式

var i;
function f2(){
console.log(i)
};
f2();
i=10;

函数在调用之前,仅仅是声明了 i,但并未给i 赋值,所以会导致 结果为undefinded。

所以总结,如果函数在调用之前未赋值,则结果为undefinded,如果在赋值之后,则结果为赋值结果,在代码中为了避免这种情况,通常将赋值放在前,调用放在之后。


比较有趣的例子

var i=10;
function i(){
console.log("嘿嘿");
}
console.log(i); //结果为10

这里的结果为10 是因为该函数能写成下列的方式

var i;
function i(){
console.log("嘿嘿");
}
i=10;
console.log(i);
所以只有i的赋值没有提升,结果为10。


如果console.log(i());


则结果为不是一个function。

 

以上是关于作用域的提升的主要内容,如果未能解决你的问题,请参考以下文章

js预解析

JS预解析与变量提升

JavaScript 预解析

JavaScript 函数作用域的“提升”现象

《关于ES6的学习》

ES6里关于作用域的拓展:块级作用域