打印Uncaught RangeError: Maximum call stack size exceeded
正常执行,不会报错
我的问题是:既然if里面的语句永远都是false,为什么不报错?
尚方宝剑之说
浏览 490回答 1
1回答
繁花不似锦
怎么会永远是false呢? 你这里三段js,最后一段if之前先console一下就看出端倪了。你这里声明的aquery是一个function,当你调用aquery('#box'),首先 里面的this自然不是aquery的实例,所以false,于是return new aquery();于是又再一次调用aquery了, 但这次,aquery是作为一个构造函数来调用的(注意到new),那么其this就是指向aquery的实例,这个时候if语句可就不是false了。于是执行后面那堆逻辑代码。其实,这种写法就是简化每次实例化一个“类”都要new的麻烦。至于第二段,为什么会报错呢?因为aquery作为一个普通函数或者构造函数,都是return new aquery(), 陷入循环了