今天沒有重點...
千萬不要小看了變數的宣告
這是JS神奇的部份之一
JS的變數可以在使用後才宣告
而且還不會是全域變數
JS的變數宣告是hoisted...
JS的變數初始化並沒有hoisted
先初始化後初始化會有差別
雖然JS會將變數宣告提到最前面
但是還是請各位將變數宣告寫在最前面...
介紹一下JS的嚴格模式
在JavaScript1.8.5時可使用
只是個字面常數不是敘述
會被不支援的瀏覽器忽略
兩個相同的參數其實本來不會錯...
eval可以用來對字串賦值
為了安全因素所以不能創造變數
雖然有嚴格模式的字串可以用
但是一定要寫在第1行才行
講解JS常見的錯誤
不能說都是你的錯
但是也不能都怪JS...
把if條件的相等寫成指派
var odov="od'_'ov"
if(odov="apple"){alert("XXXXRAT")}
把常數寫在左邊寫錯就會炸
var odov="od'_'ov"
if("apple"=odov){alert("XXXXRAT")}
var e=666
var f="666"
alert(e==f)
var g=011
var h="011"
alert(g==h)
型別轉換有風險詳情請見JS規格書
記得使用3個等號===的比較
var m=223
var n="223"
alert(m===n)
字串和數字的加法是不一樣的
小心變數所使用的型別
var num=10
var str="5"
var res=num+str
if(false);
{
alert("RRRR")
}
就這樣莫名其妙地執行了
講解如何增進JS執行效能
很簡單就先灌V8引擎
當然還是要靠使用者的技術啦
將迴圈的限制值放在for外面
才不會每次都去算
此方法各語言通用
var limit=arr.length
for(var i=0;i<limit;i++)
迴圈次數愈多效益愈高
取用HTML的DOM是很慢的動作
取到節點後就用變數存起來
對於高消耗的取用都可以適用
obj = document.getElementById("demo");
obj.innerHTML = "Hello";
儘量讓HTML的節點愈少愈好
加速網頁載入以及渲染
當然對搜尋元素也很有利
雖然說把變數東拼西湊後取名比較好
不過只用一次的變數還是免了吧...
將JS的程式放在網頁的最後
最好加上個onload時才執行所需程式碼
講解神奇的閉包
上次建構子不小心用到了
將所能取得的變數環境記起來
變數會和函式一起存在
function init() {
var name = "Nekomimi"
function display() {
alert(name)
}
display()
}
function init() {
var name = "Nekomimi"
function display() {
alert(name)
}
return display
}
可以用閉包取得別人無法取得的作用域
把東西藏起來不給別人改
最簡單的回傳物件
function Counter(){
var count=0
return {
add:function(){count+=1;},
num:function(){return count;}
}
}
複雜一點的回傳物件
function Counter(){
var count=0
return new (function(){
this.add=function(){count+=1;}
this.num=function(){return count;}
})
}
其實不只是JavaScript有閉包
連C++11也支援啦!!
概念學起來到處可以用