作用域的问题

这里为什么会报错,bindEvent里的box1不是会沿着作用域链往上搜索吗?

https://img4.mukewang.com/5c0f57ca0001ba4b04080282.jpg

蝴蝶不菲
浏览 459回答 1
1回答

精慕HU

JS作用域基本都是词法(静态)作用域,也就定义的时候就确定了能访问到的变量。(this是动态作用域)box1在init()这个函数作用域(词法作用域的一种)内定义,而bindEvent不在init内定义,所以他们的作用域链不同。你可以改成这样:function init() {   const box1 = new Box();  // box1在init的作用域      function bindEvent() { // bindEvent在init的作用域       box1; // 不在bindEvent里定义,去作用链上的init的作用域里找,找到了   }   bindEvent();}或者这样:var box1; function bindEvent() {       box1; // ok}function init() {   box1 = new Box();   bindEvent();}或者直接把box传给bindEvent()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript