JS基础面试题01--预解析与作用域

本文通过两道JavaScript面试题解析了作用域链和函数调用时的变量查找机制,解释了为什么在函数调用中,即使存在局部变量,也可能访问到全局变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面是面试题

var a = 123;
function f1(){
console.log(a);
}
function f2(){
var a = 456;
f1();
}
f2();
console.log(a)

输出结果为123,123。
首先我们先看f2函数,里面定义了一个局部变量a还调用了f1。而f1执行后打印a。那这个a是全局的a还是局部的a呢?这就由函数的调用者决定了。而f1是一个全局函数,调用者是window,所以a自然是全局的a。结果为123。
再看console.log(a),也就是相当于console.log(window.a)。那这个全局的a有改变过吗?答案是否定的。这段代码只是定义的两次a,而a的作用域是在他定义的时候就确定的。全局的a是123,局部的a是456。
再看面试题

var a = 123;
function f1(){
console.log(a);
}
function f2(){
var a = 456;
f1(a);//传入一个变量a
}
f2();
console.log(a)

结果依然是123,123。
由于f1函数定义时并没有接收参数。所以传入的a无效。如果f1定义时是这样的function f1(a){console.log(a);} 那么结果就为456,123。

时间如果可以倒流,我想我还是会卯起来蹉跎
反正就这样吧,我知道我努力过
——五月天《一颗苹果》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值