-## 1. scope:
- Js通過var宣告變數(shù),如果不加宣告魏滚,沒有宣告的內(nèi)容會被當(dāng)作全域變數(shù)處理
- Js沒有塊級作用域镀首。
example:
for(int i =0 ; i < 10 ; i++ )
這里的 ‘i’ 就屬于塊級作用域
2.this的理解:
- 在javascript中this既可以當(dāng)作全局對象鼠次,當(dāng)前對象或者是任意對象更哄,這完全取決于函數(shù)得調(diào)用方式。在js中調(diào)用可以有以下幾種方式
-
全局對象
-
當(dāng)前對象
-
任意對象
圖解Javascript this指向什么.png
當(dāng)前對象的例子:
var point = {
x : 2,
y : 2,
moveTo : function(x, y) {
this.x = this.x + x;
this.y = this.y + y;
console.log(this.x);
console.log(this.y)
}
};
point.moveTo(1,1); //this 綁定到當(dāng)前對象,即point對象`
- 首先腥寇,上面這個程式碼中成翩,使用this得時候不是用new宣告得,所以沒有指向一個新的對象赦役,之后是用dot()調(diào)用麻敌,因此this會指向dot之前的對象,也就是this掂摔。所以最后this.x=3,this.y=3;
全域變量的例子:
function func(x) {
this.x = x;
}
func(5); //this是全局對象window术羔,x為 全局變量
//決策樹解析:func()函數(shù)是用new進行調(diào)用的么?為否棒呛,進入func()函數(shù)是用dot進行調(diào)用的么聂示?為否,則 this指向全局對象window
x;//x => 5
- 這里我們可以發(fā)現(xiàn)簇秒,在調(diào)用this的時候既沒有進行new調(diào)用鱼喉,也沒有使用dot()的調(diào)用方式,所以這個時候所使用的this?的是全局變量趋观。
3.call & apply:
call 跟 apply 隸屬于
Function.prototype
所謂的Function.prototype是指Function類型中原生的方法扛禽,在ECMAScript標(biāo)準(zhǔn)的第一個版本中就已經(jīng)初步定義過,所以不用擔(dān)心兼容性的問題皱坛。
call 跟 apply的方法要實現(xiàn)的功能幾乎一致编曼,在更改this的指向的情況下,使用某個value或者function剩辟。
語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
語法:apply([thisObj[,argArray]])
Example:
var point = {
x : 2,
y : 2,
moveTo : function(x, y) {
this.x = this.x + x;
this.y = this.y + y;
console.log(this.x);
console.log(this.y)
}
};
point.moveTo(1,1); //this 綁定到當(dāng)前對 象,即point對象
var point2 = { x:10 , y:10 };
console.log(point2.x);
console.log(point2.y);
point.moveTo.call(point2,3,3);
point.moveTo.apply(point2,[-3,-3]);
Paste_Image.png
這里可以看到通過call和apply來呼叫了point中的內(nèi)建function->moveTo掐场。需要注意的是這里對于this的指向。
notice
var testarray = [1,2,3,4];
console.log(testarray.length);
testarray['a'] = "hello";
console.log(testarray.length);
console.log(testarray['a']);
在使用數(shù)組的時候要注意贩猎,關(guān)聯(lián)式數(shù)組并不會計算入傳統(tǒng)的數(shù)組結(jié)構(gòu)中熊户。
如上面輸出結(jié)果,length始終都是4吭服,并不會因為加入了a這個關(guān)聯(lián)式的內(nèi)容增加嚷堡。
內(nèi)容參考
http://www.reibang.com/p/c6cb7068bb85 【JavaScript】call與apply兄弟列傳
http://www.reibang.com/p/de47c2f9d178 圖解Javascript this指向什么?