题解JavaScript(持续更新)

1. 多个等号连续赋值

(function(){
    var x=y=1;
})();
console.log(typeof x);
console.log(typeof y);

第一次理解的时候,以为是连续赋值的问题。但是实际上这不是重点,重点在于函数中x,y都存在,但是在输出的时候,x是函数内变量,在函数外无法读取。y则是直接声明为了全局变量。故。第一个输出为undefine。第二个输出为number。
要理解这段代码可以试着敲入

(function(){
    y=1;
})();
console.log(typeof y);

会发现,并没有给y使用声明变量的var,但是这段代码可以运行,输出为number。这是因为y默认附加到了全局对象上。多个等号连续赋值的时候,var声明的效果仅局限于最开始的那一个变量。

2. prototype相关、原型链

var fn=function(){}
fn.prototype={
  value:1,
  getValue:function(){
    return this.value;
  },
  setValue:function(v){
    this.value=v;
  }
};
var a=new fn();
var b=new fn();
a.setValue(2);
console.log(b.getValue());
delete a.value;
console.log(a.getValue());

这段代码的输出是1,1。我来根据步骤,解释下原因。

1.程序声明了变量a,b和函数fn。a,b此时为undefined,fn为一段函数代码。
2.为fn的prototype属性赋值一个对象object。其中包含了value,getValue,setValue.
3.a被赋值,a的__proto__指向的是fn的prototype,a并没有value属性
4.b被赋值,b的__proto__指向的是fn的prototype,b并没有value属性
5.a.setValue(2)为a增加了一个value属性,该值为2.
6.b.getValue()时,由于b并没有value属性,于是顺着__proto__向上查找,找到的value为1。
7.同第6步,删除了a中的value属性时,也是顺着__proto__向上查找,找到的value为1。

以上是常见的题目来考察JS的细节问题,我会不定期的收集,来进行更新,欢迎互相指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值