1.作用域(起作用的範圍)
◆塊兒級作用域:ecmascript6之前js中沒有塊兒級作用域
◆詞法作用域:就是在**寫好的一刻,變數的作用域就已經確定了,這種作用域,就是所謂的詞法作用域,和詞法作用域相對的叫動態作用域,js中的詞法作用域不是動態作用域
◆ecmascript6之前js中唯一能夠產生作用域的東西是 函式
◆詞法作用域的規則【
◇函式允許訪問函式外的資料
◇整個**結構中只有函式可以限定作用域
◇作用域規則首先使用提公升規則分析
◇如果當前作用域中有了該變數,就不考慮外面的同名變數◇】
2.js**的執行分為兩個步驟
◆預解析:檢查語法錯誤,函式提公升,變數提公升【
◇在提公升的時候,如果有變數和函式同名,會忽略掉變數,只會提公升函式。
◇函式的提公升:function name(){}
◇變數的提公升:var name;
☆提公升歸提公升,賦值歸賦值,提公升的時候不會分配空間,賦值的時候才會進行記憶體空間的分配。
◇預解析式分作用域的,函式中的變數或者子函式都會提公升到當前父級作用域中,而不是提公升到全域性作用域中。
◇預解析式分段的,也就是會分script標籤對,但是這個問題只針對function而已。
◇函式表示式並不會被提公升,如 var fn=function(){};
】◆執行:真正的執行js**
3.提公升
◆變數的提公升是分作用域的
◆當函式和變數同名的時候,只會提公升函式,不會提公升變數名
◆函式同名,全部都會提公升,但是後面的函式,會覆蓋前面的函式
◆函式表示式不會被提公升,但是變數會被提公升◆◆
◆4.作用域鏈
◆只要是函式就可以創造作用域
◆函式中又可以再建立函式
◆函式內部的作用域可以訪問函式外部的作用域
◆如果有多個函式巢狀,那麼就會構成乙個鏈式訪問結構,這就是作用域鏈。
◆5.變數訪問規則
◆首先在所在的作用域中查詢,如果找到了就直接使用,如果沒有找到就到上一級作用域查詢,直到找到為止,如果實在找不到,那麼返回undefined
6.閉包
◆閉:閉合,關閉,封閉
◆包:包裹,包起來
◆乙個具有封閉的對外不公開的,包裹結構的空間
◆js中的閉包就是函式
◆閉包的原理:
【◇就是作用域訪問原則也就是作用域鏈
◇上級作用域無法直接訪問下級作用域中的變數
】◆閉包要解決的問題:
【◇閉包內的資料不允許外界訪問
◇要解決的問題就是間接訪問該函式內的資料
】7.閉包的基本模式
◆通過閉包返回的函式或者方法,來修改函式內部的資料
【//很像是在給乙個物件封裝字段一樣
function foo(),
setname:function(value),
getage:function(),
setage:function(value)
age=value;
return age;}}
}var obj=foo();
obj.setname("yls");
obj.setage(18);
console.log(obj.getname()+":"+obj.getage());
】。◆建立乙個私有的空間,保護資料
◆外部想要訪問資料,只能通過函式提供的方法
◆在提供的方法中,可以設定一些校驗的邏輯判斷,確保資料的正確性和安全性◆◆
8.中國國家數字圖書館:
9.條件式函式宣告是否會被提公升,由瀏覽器決定,條件式函式宣告不在w3c標準之中,所以不推薦去寫【
foo();//這裡會報錯,因為未被提公升
if(true)}】
js相關筆記(五)
23.和 的運算的妙用 不只是取bool值,也能取 其它型別的值,當使用 和 鏈住兩個值時,表面會以boolean型別來進行處理,但是最終的結果是 值的本身 而並 不一定 返回的是 boolean型別的值 切記 先執行 再執行 當兩邊的值都為false時 取 左邊的值 當有一邊值為false時 取 ...
js物件導向筆記
js物件導向的組成是 1 屬性 2 方法 使用的時候是再建構函式裡面加屬性,在原型裡面加方法。如果直接在建構函式裡面 傳值 新建物件 增加屬性 方法 返回物件的這種方法,會產生問題,主要是 1 沒有new 2 函式重複定義,這樣會讓資源浪費 所以,我們要在建構函式裡面使用this構造屬性,把方法放在...
JS學習筆記 物件導向
類 物件 類 模子 物件 產品 成品 蛋糕 物件 模子 類 array 類 arr 物件 array.push 錯 arr.push 對 new arr 錯 原型prototype 是加到類上面,而不是物件。混合方式構造物件 方法都是相同的,屬性都是不同的。方法 函式 屬性 變數 用 建構函式 加 ...