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

下面是面试题

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。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值