幾道題考考你 JavaScript 做用域(80%的人回答不對)

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

答案:1。定義變量若是不使用 var 則變量爲爲全局做用域。固然嚴格模式是禁止這樣作的。git

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權威指南》。github

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

相關文章
相關標籤/搜索