扫码关注官方订阅号
var x = "global"; function a() { console.log(x); var x = "local"; console.log(x); } a();
为什么运行结果是 undifined 和 local 而不是global和local
人生最曼妙的风景,竟是内心的淡定与从容!
自行搜索“声明提前”,函数实际上相当于
function a() { var x; console.log(x); x = "local"; console.log(x); }
变量声明提升,你的代码相当于:
var x = "global"; function a() { var x; // undefined console.log(x); var x = "local"; console.log(x); } a();
你可以看看MDN的javascript指南https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#Declarations
所以 ES6里面有了let
第一个log的x在函数作用域内没有被定义。
在函数内部声明的变量x会提升到函数顶部,相当于var x; 此时x值为undefined,第一次console.log(x)读取x的值会优先读取函数内变量x,所以结果是值为undefined
javascript的变量提升 Hoisting
要输出正确的,
function a() { console.log(x); x = "local"; //去掉var重新声明 console.log(x); }
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
自行搜索“声明提前”,函数实际上相当于
变量声明提升,你的代码相当于:
你可以看看MDN的javascript指南
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Grammar_and_types#Declarations
所以 ES6里面有了let
第一个log的x在函数作用域内没有被定义。
在函数内部声明的变量x会提升到函数顶部,相当于var x; 此时x值为undefined,第一次console.log(x)读取x的值会优先读取函数内变量x,所以结果是值为undefined
javascript的变量提升 Hoisting
要输出正确的,