作用域作用域链自由变量变量提升
Posted fengshaopu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作用域作用域链自由变量变量提升相关的知识,希望对你有一定的参考价值。
一、作用域
对象 | 类型 |
---|---|
global/window | 全局作用域 |
function | 函数作用域(局部作用域) |
{} | 块状作用域 |
this | 动态作用域 |
全局作用域 :任何地方都可以访问,反复使用
函数作用域(局部作用域):仅在函数内部可使用的变量,不能反复使用
例子:
var a=10;
function fun()
{
var a=100;
a++;
console.log(a);
}
fun();//101
console.log(a);//10
二、作用域链
自由变量的向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。
三、自由变量
自由变量的概念: 当前作用域没有定义的变量
var a=0;
function f1(){
console.log(a) //当函数中没有定义这个变量,切可以使用时,这就是自由变量
}
f1()
四、变量提升
var声明的变量,function声明的函数存在变量提升
let const 不会变量提升
五、预解析
只要还有一个函数作用域的时候就会有域解析:
var跟函数可以变量提升
1.第一种情况 全局
因为var 变量提升了 ,因为变量提升了没有赋值所以第一个a是undefind
`提升到了 这里 var a `
console.log(a) //undefind
var a = 10
console.log(a)// 10
2.第二种函数内部
因为 function x() 跟 var 变量提升了
有function 的时候会先提升
`提升到了 这里 function x() var a `
var x = 30;
function test(){
alert(x); //undefined
var x = 10;
alert(x); //10
x=20;
function x(){
};
alert(x); //20
}
test();
以上是关于作用域作用域链自由变量变量提升的主要内容,如果未能解决你的问题,请参考以下文章