几道题考考你 JavaScript 作用域(80%的人回答不对)

2
(function(){
    var a = b =1;
})()
console.log(b)

答案:1。定义变量如果不使用 var 则变量为为全局作用域。当然严格模式是禁止这样做的。

var a =20;
function t1(){
    console.log(a)
}
(function t2() {
    var a = 10;
    t1()
})()
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();

答案:20, "local scope" , "local scope"。JS 遵循词法作用域原则,其中后两题来源于《JavaScript权威指南》。

var a = 20;

var obj = {
    a: 40,
    test() {
        var a = 10;
        console.log(this.a)
    }
}
// Q1
obj.test();
// Q2
var t = obj.test;
t();
// Q3
(obj.test)();
// Q4
(obj.test, obj.test)()

答案:40,20,40,20。非箭头函数下的 this 指向运行时所在作用域。Q4 中逗号操作符会从左到右计算它的操作数,返回最后一个操作数的值。

原文发表于我的 GitHub 博客

你可能感兴趣的

xialeistudio · 2017年10月06日

谢谢,这个主要考察this,之前有个人发过一篇文章

+2 回复

3

@xialeistudio 那个人是我吗(滑稽

海洋饼干 · 2017年10月06日
2

@海洋饼干 可能吧

xialeistudio · 2017年10月06日
小忆 · 2017年10月07日

最后一题没回答对,有点不理解

+2 回复

载入中...