前言
下面所讲的概念只是简单让大家在脑海中有一个基本的概念,如果哪里有误,或者理解不了,也欢迎朋友们指正或讨论。
域解析
在了解变量提升同函数提升前,我们需要知道一个东西,它叫域解析
在js代码运行的时候,他会有这样的一个运行顺序。
先进行域解析,再对代码进行执行
域解析会先将js中所有var同function 提升到当前作用域的最前面
再进行代码的执行,对代码进行一个从上到下的执行过程
变量提升和函数提升
而域解析分为变量域解析同函数域解析,也就是变量提升和函数提升。
首先,我们来了解一下变量提升
变量提升:就是将所有的变量声明提升到当前作用域的最前面 并且!不提升变量的赋值操作
然后是函数提升
函数提升:就是将所有的函数声明提升到当前作用域的最前面 并且!不调用函数
有些小伙伴不太清晰的话,也可以连同下面的例子一起理解
举例
例子1
例如下面代码()
<script>
console.log(asd);
var asd = 123;
//域解析后相当于
// var asd;
// console.log(asd);
// asd = 123;
</script>
这里明显是变量提升,控制台结果如下
输出undefined ,表示尚未初始化的变量的值,上方变量在声明后直接打印,而赋值操作在打印时还未执行
例子2
那么,你也就能看懂一下代码的区别了
<script>
// 1.
asd();
var asd = function () {
console.log(123);
}
// 2.
var asd = function () {
console.log(123);
}
asd();
</script>
综上,我们也就可以认识到,函数调用是应当写在函数表达式下面的