JS 中的变量提升

青春壹個敷衍的年華 提交于 2020-01-16 05:44:27

JS 中的变量提升

参考不同的文章, 整理成为自己可理解的内容
文章原地址
出现的代码运行线上地址 javascript-visualizer
首先来看小例子

console.log('name: ', name) // undefined
console.log('age : ', age ) // undefined
console.log('sayHi ;', sayHi) // f sayHi()

var name = '小火车'
var age = 24
function sayHi () {
	return "sayHI"
}

打印出来的结果都是undefined
先了解JS的运行机制: 首先是创建阶段, 其次是执行阶段

在创建阶段的时候,JS引擎就会创建全局的window和this对象, 将所有的变量声明都赋予一个默认值undefined,所有的函数声明都被存入到内存中, 在执行阶段的时候,JS引擎就会将真实的值赋值给声明的变量

  • 在创建阶段的时候, JS引擎主要做的事情

    1.创建了全局的window对象
    2.创建了this对象
    3.给变量和函数分配内存
    4.给变量赋默认值undefined,把函数声明放进内存中

    在这里插入图片描述

  • 在执行阶段, JS引擎就会一步一步的执行代码, 将内存中的变量赋予真实值
    在这里插入图片描述

再回头看先前的代码

console.log('name: ', name) // undefined
console.log('age : ', age ) // undefined
console.log('sayHi ;', sayHi) // f sayHi()

var name = '小火车'
var age = 24
function sayHi () {
	return "sayHI"
}

JS的引擎开始执行console.log()代码的时候,这个时候已经就处于执行阶段了, 之前的创建阶段已经执行完毕, 变量的声明已经被赋予了默认值undefined, 同时函数的声明已经在内存中定义了, 因此nameage都是被赋予了undefined,sayHi也正是内存中函数的引用

何为变量提升: 在JS引擎创建阶段给变量赋予默认值undefined的过程就是变量提升
何为变量提升: 在JS引擎创建阶段给变量赋予默认值undefined的过程就是变量提升
何为变量提升: 在JS引擎创建阶段给变量赋予默认值undefined的过程就是变量提升

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!