js的变量提升理解
2022/1/1 6:09:34
本文主要是介绍js的变量提升理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
先来看一段代码
showName() console.log(myname) var myname = '极客时间' function showName() { console.log('函数showName被执行'); }
思考一下它的输出
为什么myname在声明之前就可以输出到控制台=>这就是因为变量提升
上面的代码等价于下边的代码
/* * 变量提升部分 */ // 把变量 myname提升到开头, // 同时给myname赋值为undefined var myname = undefined // 把函数showName提升到开头 function showName() { console.log('showName被调用'); } /* * 可执行代码部分 */ showName() console.log(myname) // 去掉var声明部分,保留赋值语句 myname = '极客时间'
js代码执行前会进行编译(变量提升也就在这个阶段发生)
注意
思考题1
function showName() { console.log('极客邦'); } showName(); function showName() { console.log('极客时间'); } showName();
分析一下执行过程
- 首先是编译阶段。遇到了第一个 showName 函数,会将该函数体存放到变量环境中。接下来是第二个 showName 函数,继续存放至变量环境中,但是变量环境中已经存在一个 showName 函数了,此时,第二个 showName 函数会将第一个 showName 函数覆盖掉。这样变量环境中就只存在第二个 showName 函数了。
- 接下来是执行阶段。先执行第一个 showName 函数,但由于是从变量环境中查找 showName 函数,而变量环境中只保存了第二个 showName 函数,所以最终调用的是第二个函数,打印的内容是“极客时间”。第二次执行 showName 函数也是走同样的流程,所以输出的结果也是“极客时间”。
思考题2
showName() var showName = function() { console.log(2) } function showName() { console.log(1) }
分析一下执行过程
-
编译阶段:
var showName = undefined
function showName(){console.log(1)} -
执行阶段:
showName()//输出1
showName=function(){console.log(2)}
//如果后面再有showName执行的话,就输出2因为这时候函数引用已经变了
这篇关于js的变量提升理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04React 19 来了!新的编译器简直太棒了!
- 2025-01-032025年Node.js与PHP大比拼:挑选最适合的后端技术进行现代web开发
- 2025-01-03?? 用 Gemini API、Next.js 和 TailwindCSS 快速搭建 AI 推文生成项目 ??
- 2024-12-31Vue CLI多环境配置学习入门
- 2024-12-31Vue CLI学习入门:一步一步搭建你的第一个Vue项目
- 2024-12-31Vue3公共组件学习入门:从零开始搭建实用组件库
- 2024-12-31Vue3公共组件学习入门教程
- 2024-12-31Vue3学习入门:新手必读教程
- 2024-12-31Vue3学习入门:初学者必备指南
- 2024-12-30Vue CLI多环境配置教程:轻松入门指南