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 博客


isLishude
1.1k 声望16 粉丝

JS赛高!