题目:
var z=10;
function foo(){console.log(z);}
(function(funArg){var z=20;funArg();})(foo);
如果不清楚作用域链的形成,就会搞不清楚输出结果是10还是20,这里介绍一种用this指向去判断变量所在的作用域,可以轻易的得到结果。
判断this指向的一种情况是:this指向this所在函数的直接调用者
把上面的z换成this.z,再看题目,this所在函数foo的直接调用者是window。
用作用域链分析的话,函数foo在window上声明,funArg()调用时会形成一个函数作用域,该函数作用域里面没有变量z,并且该函数作用域不在那个自调用的函数的作用域里面,所以只能到window上面去找。
用this指向来判断变量的作用域
最新推荐文章于 2021-04-01 22:58:42 发布