這裡再次感謝大叔提供了這麼好的javascript學習書籍,想學習javascript的同學,不要錯過這本書哦 o(∩_∩)o
一,javascript基礎
1.undefined和null:當使用var something;定義一個變量,alert(something)得到就是undefined。undefined和null主要是理論上的差別:null表示該值被定義,但是沒有任何實際值。undefined==null傳回true。
2.自動類型轉換
下面幾個判斷都會傳回true:false==0 ""==0 "5"==5 在多數情況下會将一個類型的值轉化為另一個類型進行判斷,但是當遇到null或者undefined的時候,隻有兩邊都是null或undefined時才傳回true。0,NaN和空字元串(""或者空白字元(串)" ")轉化為false,其他所有的值都會轉化為true。
如果不想發送任何類型的自動轉化,可以使用另外的兩個操作符:===和!==。分别表示精确相等和精确不等,此時,null===undefined,false===0,""===0,"5"===5都會傳回false。
如果數字和字元串相乘,javascript會嘗試将字元串轉換為數字。如"Apollo"+5——>Apollo5,null+"ify"——>nullify,"5"*5=25,"zxf"*5=NaN.因為字元串不是數字,是以得到的結果也不是數字,NaN==NaN傳回的是false,判斷是否是數字可以用isNaN函數。
3.&&和||
||的作用:如果能将該值轉化為bool,并且值為true,就傳回左邊的值,否則傳回右邊的值
&&的作用:當左邊的值為false時,傳回左邊的值,否則傳回右邊的值。
另:隻在必要時才執行表達式右邊的值,例如true||X,不管X什麼,結果都是true,是以X從來就沒有被執行過。
4.函數
在C#等其他語言中,大括号是可以産生新的作用域的,但是在javascript中,函數是唯一可以建立新作用域的地方。如:
此時,内外a的值都是1.
4.1 函數值
javascript裡面的所有東西都是值,包括function函數,可以像定義一個普通變量一樣定義函數。如:
(a||b)()這裡将"調用時不傳參數"的操作符"()"應用到了(a||b)上,如果該表達式産生的不是函數,則會報錯。用匿名的函數也可以:(a||function(){alert("B");})();
4.2 閉包
如果建立局部變量的函數調用不在棧上了,那局部變量會發生什麼變化,如下:
調用createFunction()傳回一個函數,這裡賦給了a(展現了函數值的能力),a再加上"調用時不傳參數"的操作符"()"執行傳回的函數function(){return local;},local的值被儲存了下來,javascript的這種特性成為閉包——包裹一些局部變量的一個函數叫做一個閉包。再如:
ps:感謝大叔這麼簡短有力的文字,讓我對閉包有了更多的了解,之前看過一些關于閉包描述,都不是很清楚。現在好多了o(∩_∩)o