这里如果不用this,为什么会报错呢?

    function Test(){
        this.brand = "mac";
        this.sayBrand = function (){
            console.log(brand); //这里如果不写成this.brand
        }
    }
    var t = new Test();
    t.say();

为什么控制台会报错呢?

我理解的是:
t = new T() ————> T里的this会绑定成t。
也就是:

    t = {
            t.brand : "mac",
            t.sayBrand : function (){
                console.log(brand) 
                **//这里面的brand难道不应该就近取t里变量brand吗?         **
            }
        }
阅读 1.9k
2 个回答

混淆了变量跟属性的概念,brand无法在本作用域找到时是会往上寻找,但是t.band是属性,所以一定不会找到它,访问属性唯有对象+属性这样访问。brand往上的作用域就是全局了,全局没声明这个变量自然报错。

JS 里访问一个变量名的时候,是在作用域里找同名变量,找不到就往上一层作用域找……所有的作用域串起来,就像是一个链条,即作用域链。
但是 作用域链上并不包含this ,所以在当前作用域中访问不到 brand 的时候,并不会试图访问 this.brand, 而是去上一层作用域找。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题