先看一段平常开发中遇到的代码(片断1)浏览器
display()
console.log(name)
var name = "掘金"
function display() {
console.log("平常学习产出")
}
复制代码
经过控制台输出,如图:
bash
display()
console.log(name)(下面打印的name1,只改了个名称)
function display() {
console.log("平常学习产出")
}
复制代码
再执行上面的代码,结果以下:函数
从上面两段代码能够看出:学习
若是变量声明用 let、const 关键字会出现啥状况呢
若是用google浏览器二次执行片断1(刷新)又会遇到啥状况this
JavaScript 调用一个函数或者使用一个变量,不得不在编译的过程当中先进行声明和赋值,下面是变量的声明和赋值google
var name = "掘金"
复制代码
这段代码能够分红两部分spa
var name // 声明部分
name = "掘金" // 赋值部分
复制代码
以下图所示:3d
函数的声明和赋值code
function display() {
console.log("平常学习产出")
}
var display = function() {
console.log("平常学习产出")
}
复制代码
图解以下:cdn
变量提高:函数及变量的声明都将被提高到函数的最顶部。
变量提高并不是从物理层面移动到代码的最前面,实际上变量和函数声明在代码中的位置是不变的,JavaScript代码是在内存中执行的,因此时常都说JavaScript代码先编译,后执行;这个过程会出现两个模块:执行上下文和可执行代码这两个定义常常都会在各类博客和项目中说起到,后续诸如 this、变量、对象都与之相关
如图:
从上图执行流程细化过程当中,编译阶段代码能够分红两部分:
var name = undefined
function display() {
console.log("平常学习产出")
}
复制代码
display()
console.log(name)
name = "掘金"
复制代码
若是出现相同的函数声明,执行最后一个函数,前面的函数会被覆盖
若是是下面的状况又如何:
console.log(display)
display()
var display = function() {
console.log("学习要有产出")
}
复制代码