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的细节问题,我会不定期的网络,来举行更新,迎接相互指教