为了账号安全,请及时绑定邮箱和手机立即绑定

作用域的问题

作用域的问题

蝴蝶不菲 2018-11-23 15:14:33
这里为什么会报错,bindEvent里的box1不是会沿着作用域链往上搜索吗?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

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()。

查看完整回答
反对 回复 2018-12-11
  • 1 回答
  • 0 关注
  • 458 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信