1.先看如下一段简单的代码:
var name = 'hello';
function test() {
alert(name);
}
test();
执行大家都知道会弹出 hello,没啥疑问.
2.那么在alert后面再加上一行代码后,如下:
var name = 'hello';
function test() {
alert(name);
var name = 'hi';
}
test();
大家猜猜会输出什么结果?
弹出的是一个 undefined。
3.在2的基础上,再做修改:
var name = 'hello';
function test() {
alert(name);
name = 'hi';
}
test();
为什么这次就输出hello呢?
4.这里牵涉到javascript的作用域,作用域链的知识。
网上的文章觉得讲得都有点教课化,看过之后觉得似懂非懂。
求通俗易懂的解答,最好能对两种情况做对比回答。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
第一段代码因为test里面没有name的声明,所以向上访问到外部的的name
第二段代码相当于
javascript引擎在进入作用域开始读取数据之前,会为这段作用域里所有被声明的变量和函数名开辟开辟一块内存,但内存里什么都没有,只是
undefined。拿你上面的例子来说,在执行alert(name);的时候,其实name已经在内存中有一席之地了,只是还没有赋值,这时候alert,就会返回undefined。当执行到var name = 'hi';的时候,才给name的内存中保存了数据'hi'。楼主的这一段代码
在浏览器处理的时候会变成:
这叫做变量提升。