(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