js基礎篇(六)(函數和作用域)

1.函數

  • 返回值,就是函數執行的結果。
    - 使用return 來設置函數的返回值。
    - 語法:return 值;
    - 該值就會成爲函數的返回值,可以通過一個變量來接收返回值
    - return後邊的代碼都不會執行,一旦執行到return語句時,函數將會立刻退出。
    - return後可以跟任意類型的值,可以是基本數據類型,也可以是一個對象。
    - 如果return後不跟值,或者是不寫return則函數默認返回undefined。
    - break、continue和return
    - break
    - 退出循環
    - continue
    - 跳過當次循環
    - return
    - 退出函數

    • 參數,函數的實參也可以是任意的數據類型。

    • 方法(method)

      • 可以將一個函數設置爲一個對象的屬性,
        當一個對象的屬性是一個函數時,
        我們稱這個函數是該對象的方法。
      • 對象.方法名();
      • 函數名();

2.作用域

  • 作用域簡單來說就是一個變量的作用範圍。
    • 在JS中作用域分成兩種:
      1.全局作用域
      - 直接在script標籤中編寫的代碼都運行在全局作用域中
      - 全局作用域在打開頁面時創建,在頁面關閉時銷燬。
      - 全局作用域中有一個全局對象window,window對象由瀏覽器提供,
      可以在頁面中直接使用,它代表的是整個的瀏覽器的窗口。
      - 在全局作用域中創建的變量都會作爲window對象的屬性保存
      在全局作用域中創建的函數都會作爲window對象的方法保存
      - 在全局作用域中創建的變量和函數可以在頁面的任意位置訪問。
      在函數作用域中也可以訪問到全局作用域的變量。
      - 儘量不要在全局中創建變量

(1).函數作用域

  • 函數作用域是函數執行時創建的作用域,每次調用函數都會創建一個新的函數作用域。
    - 函數作用域在函數執行時創建,在函數執行結束時銷燬。
    - 在函數作用域中創建的變量,不能在全局中訪問。
    - 當在函數作用域中使用一個變量時,它會先在自身作用域中尋找,
    如果找到了則直接使用,如果沒有找到則到上一級作用域中尋找,
    如果找到了則使用,找不到則繼續向上找,一直會
    - 變量的聲明提前
    - 在全局作用域中,使用var關鍵字聲明的變量會在所有的代碼執行之前被聲明,但是不會賦值。
    所以我們可以在變量聲明前使用變量。但是不使用var關鍵字聲明的變量不會被聲明提前。
    - 在函數作用域中,也具有該特性,使用var關鍵字聲明的變量會在函數所有的代碼執行前被聲明,
    如果沒有使用var關鍵字聲明變量,則變量會變成全局變量
    - 函數的聲明提前
    - 在全局作用域中,使用函數聲明創建的函數(function fun(){}),會在所有的代碼執行之前被創建,
    也就是我們可以在函數聲明前去調用函數,但是使用函數表達式(var fun = function(){})創建的函數沒有該特性
    - 在函數作用域中,使用函數聲明創建的函數,會在所有的函數中的代碼執行之前就被創建好了。

3.this(上下文對象)

  • 我們每次調用函數時,解析器都會將一個上下文對象作爲隱含的參數傳遞進函數。
    使用this來引用上下文對象,根據函數的調用形式不同,this的值也不同。
    • this的不同的情況:
      1.以函數的形式調用時,this是window
      2.以方法的形式調用時,this就是調用方法的對象
      3.以構造函數的形式調用時,this就是新創建的對象

4.構造函數

  • 構造函數是專門用來創建對象的函數
    • 一個構造函數我們也可以稱爲一個類
    • 通過一個構造函數創建的對象,我們稱該對象時這個構造函數的實例
    • 通過同一個構造函數創建的對象,我們稱爲一類對象
    • 構造函數就是一個普通的函數,只是他的調用方式不同,
      如果直接調用,它就是一個普通函數
      如果使用new來調用,則它就是一個構造函數
- 例子:
		function Person(){
		
		}
		
- 構造函數的執行流程:
	1.創建一個新的對象
	2.將新的對象作爲函數的上下文對象(this)
	3.執行函數中的代碼
	4.將新建的對象返回
	
- instanceof 用來檢查一個對象是否是一個類的實例
	- 語法:對象 instanceof 構造函數
		- 如果該對象時構造函數的實例,則返回true,否則返回false
		- Object是所有對象的祖先,所以任何對象和Object做instanceof都會返回true
		
- 枚舉對象中的屬性
	for...in
	語法:
		for(var 屬性名 in 對象){
		
		}
		
	for...in語句的循環體會執行多次,對象中有幾個
	屬性就會執行幾次,
		每次講一個屬性名賦值給我們定義的變量
		,我們可以通過它來獲取對象中的屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章