百度经典JavaScript面试题代码输出(作用域链)

百度经典面试题
下面代码输出结果是什么?

function bar() {
    console.log(myName)
}
function foo() {
    var myName = " 百度 "
    bar()
}
var myName = " 腾讯"
foo()

答案是:腾讯

这里考察了JavaScript的作用域链的知识
1、函数执行上下文是函数声明的上下文,不是执行时刻的上下文,因此br()函数执行的变量myName 上下文是腾讯,而不是执行的foo()函数内部的变量

2、foo 和 bar 的上级作用域都是全局作用域,所以如果 foo 或者 bar 函数使用了一个它们没有定义的变量,那么它们会到全局作用域去查找。也就是说,词法作用域是代码阶段就决定好的,和函数是怎么调用的没有关系

小伙子最后总结一下:一个函数执行的上下文不是在其执行阶段的,而是在声明阶段的上下文,使用变量也是声明阶段的;如果函数有传入变量则用传入变量,没有则用声明阶段上下文变量

上一篇:【YBTOJ】【UVA10140】Prime Distance


下一篇:数据库查询中的特殊字符的问题