作为Js初学者而言,这是一个令我费解的问题,代码如下:
var a = 'a';
(function(){
console.log(a);
var a = 'b';
})();
如下是在chrome浏览器中调用后的结果:
自己的理解是,Js在编译时会对变量和函数进行扫描,然后再按照顺序执行,在自执行函数内部,首先先声明var a,再按照顺序执行,所以上面的代码可以看成是如下执行顺序:
var a = 'a';
(function(){
var a;
console.log(a);
var a = 'b';
})();
所以输出的是undefined
不知道理解的是否正确。如果不正确的话,希望能够解释一下!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
正解,函数内部声明提前,赋值保持不变,执行console.log时只声明了,而没有赋值
你理解的代码是对的,专业名词叫 变量提升(Hoisting)
意思是: 在函数作用域内,会把所有的变量在作用域之前声明,但要注意的是 Hoisting 只在函数作用域内起作用,如果你把
function(){}换成if(){}或者for(;;){}那就不是输出undefined了 而是正常输出var a;
console.log(a);
a = 'b';
定义一次就 ok 了
正解,代码声明提前。建议题主去刷一本书.
JavaScript高级程序设计,刷完之后,js基本没有盲点。js是先定义所有变量, 在通过程序流程去给变量赋值,执行操作, 所以会先
这里控制台打印出来的a是undefined;
如果想使用a的话 要在调用a这个变量之前先赋值。
正解,var会变量提升,其实现在大部分的var都可以换成let