JS作用域笔记0
-
看一下代码:
var a = 'Amy'; function fun(){ console.log(a);//undefined var a = 'Jane';//该变量a为局部变量 console.log(name());//Jane function name(){ return a; } } fun();//undefined Jane
上面第一个输出undefined,输出的a是fun函数里的局部变量a,虽然在函数里局部变量a在后一行,但是在这是进行了声明提升,也就是先声明了局部变量a,但还没赋值,所以输出undefined,相当于以下代码:
var a = 'Amy';
var a;//先声明局部变量a
console.log(a);//undefined
a = 'Jane';//然后再为该局部变量a赋值'Jane'
console.log(name());//Jane
function name(){
return a;
}
}
fun();//undefined Jane
2.再看以下代码
var a = 'Amy';
function fun(){
a = 123;//这里的a为局部变量a
console.log(a);//123
var a = 'Jane';
console.log(a);//Jane
name();
function name(){
console.log(a);//undefined
var a = 'Tommy';//该变量a为name函数的局部变量
console.log(a);//Tommy
}
}
console.log(a);//Amy
fun();//123 Jane undefined Tommy
console.log(a);//Amy
上面代码,为什么fun函数里第一行的a不会改变全局变量a的值?因为这fun函数里的第一行a改变的是第5行局部变量a的值,相当于以下代码:
var a = 'Amy';
function fun(){
var a;//先声明局部变量a
a = 123;//为局部变量a赋值
console.log(a);//123
a = 'Jane';//修改局部变量a的值
console.log(a);//Jane
name();
function name(){
console.log(a);//undefined
var a = 'Tommy';//该变量a为name函数的局部变量
console.log(a);//Tommy
}
}
console.log(a);//Amy
fun();//123 Jane undefined Tommy
console.log(a);//Amy
3.看以下代码:
var b = 321;
function fun1(){
console.log(b);
b = 456;
console.log(b);
}
console.log(b);//321
上面代码没有调用fun1函数,所以只输出结果321
当调用fun1函数:
var b = 321;
function fun1(){
console.log(b);//输出的是全局变量b的值
b = 456;//改变的是全局变量b的值
console.log(b);//输出的是全局变量b的值
}
fun1();//321 456
console.log(b);//456
上面代码调用了fun1函数后,全局变量b的值被改变。
4.看以下代码
var b = 321;
function fun1(){
console.log(b);//undefined
var b = 456;//局部变量b
console.log(b);//456
}
fun1();//undefined 456
console.log(b);//321
上面代码第3行输出的是局部变量b,因为在该fun1里局部变量声明提前,所以在声明了变量但还未赋值,会输出undefined,赋值后才输出456。最后一行输出的是全局变量b的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)