1. 程式人生 > >函式、函式作用域、this、建構函式

函式、函式作用域、this、建構函式

1.函式

- 返回值,就是函式執行的結果。
    - 使用return 來設定函式的返回值。
    - 語法:return 值;
        - 該值就會成為函式的返回值,可以通過一個變數來接收返回值
    - return後邊的程式碼都不會執行,一旦執行到return語句時,函式將會立刻退出。
    - return後可以跟任意型別的值,可以是基本資料型別,也可以是一個物件。
    - 如果return後不跟值,或者是不寫return則函式預設返回undefined。
    - break、continue和return
        - break
            - 退出迴圈
        - continue
            - 跳過當次迴圈
        - return
            - 退出函式

- 引數,函式的實參也可以是任意的資料型別。

- 方法(method)
    - 可以將一個函式設定為一個物件的屬性,
        當一個物件的屬性是一個函式時,
            我們稱這個函式是該物件的方法。
    - 物件.方法名();
    - 函式名();    

2.作用域

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

    2.函式作用域
        - 函式作用域是函式執行時建立的作用域,每次呼叫函式都會建立一個新的函式作用域。
        - 函式作用域在函式執行時建立,在函式執行結束時銷燬。
        - 在函式作用域中建立的變數,不能在全域性中訪問。
        - 當在函式作用域中使用一個變數時,它會先在自身作用域中尋找,
            如果找到了則直接使用,如果沒有找到則到上一級作用域中尋找,
                如果找到了則使用,找不到則繼續向上找,一直會

    - 變數的宣告提前
        - 在全域性作用域中,使用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語句的迴圈體會執行多次,物件中有幾個屬性就會執行幾次,
        每次講一個屬性名賦值給我們定義的變數,我們可以通過它來獲取物件中的屬性

相關推薦

【6】裝飾器閉包函式變數作用問題

        【一】、裝飾器思想 裝飾器是其實想增加一個函式的功能,但是又不想變動原來函式的程式碼,就用裝飾器。 比如:我們用別人的一個函式,又不是很滿意,所以用裝飾器裝飾一下即可。   def fun1(): prin

一文搞懂:詞法作用動態作用回撥函式閉包

不管什麼語言,我們總要學習作用域(或生命週期)的概念,比如常見的稱呼:全域性變數、包變數、模組變數、本地變數、區域性變數等等。不管如何稱呼這些作用域的範圍,實現它們的目的都一樣: (1)為了避免名稱衝突; (2)為了限定變數的生命週期(本文以變數名說事,其它的名稱在規則上是一樣的)

Python 包模組函式變數作用

Python 專案的組織結構 - 包 -- 模組 --- 類 ---- 函式、變數   Python是利用包和模組來組織一個專案的。   包: 包的物理表現是一個資料夾,但是一個資料夾卻不一定是個包,要想讓個資料夾成為一個

Python函式的定義匿名函式函式的引數函式呼叫引數傳遞變數作用遞迴呼叫

Python函式: 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。 Python提供了許多內建函式,比如print()。你也可以自己建立函式,這被叫做使用者自定義函式。 定義函式: 在Python中,定義一個函式要使用def語句,依次寫出函式名、

python入門與進階篇(四)之包模組函式與變數作用

python專案的組織結構 包(資料夾)-->模組(檔案)-->類-->函式和變數   seven.c4、six.c4:(seven)包名.模組名(c4) 構成名稱空間 seven包的結構: seven    --t(子包)        --

理清JS中的詞法靜態動態函式作用

呃剛剛寫了好多,結果被我誤操作覆蓋掉了,我的心血 ╥﹏╥… 沒關係重新寫一遍,也提醒同樣在這個平臺寫部落格並且像我一樣喜歡使用markdown語言碼字的同學 “儲存線上到草稿”是一個好習慣,嗯嗯 今天雙十一,感覺該剁手了。。 很多同學在學習JavaS

【JavaScript高階】7函式高階(作用作用鏈)

一、作用域 1. 理解 * 就是一塊"地盤", 一個程式碼段所在的區域 * 它是靜態的(相對於上下文物件), 在編寫程式碼時就確定了 2. 分類 * 全域性作用域 * 函式作用域 * 沒有塊作用域(ES6有了) 3. 作用 * 隔離變數,不同作用域下同名變數不會

python學習筆記12(裝飾器函式變數作用

裝飾器、偏函式、變數作用域 裝飾器 定義: 是一個閉包,把一個函式當做引數,返回一個替代版的函式 本質: 就是一個返回函式的函式 示例: #簡單的裝飾器 def func1(): #定義了一個函式 print("sunck is a good man") #希望在不改

改變函式作用(call apply bind)

call、 apply 、bind 同異 1)第一個引數都是this的上下文 2)apply第二個引數是陣列,call和bind後面都是引數列表 3) call和apply預設會自動執行,bind需要在後面加()來自動執行 4)bind是E

linux shell 自定義函式(定義返回值變數作用)介紹

inux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。下面說說它的定義方法,以及呼叫需要注意那些事項。 一、定義shell函式(define function) 語法: [ function ] funname [()] {     act

十二變數作用:區域性變數全域性變數,函式版名片管理系統—新增函式文件

一、區域性變數: 區域性變數:就是在函式內部定義的變數。(在別的函式內不能用) 不同的函式可以定義相同名字的區域性變數,各用各的不會產生影響。 區域性變數的作用是為了臨時儲存資料需要在函式中定義變

Js中arguments的使用函式自呼叫變數作用函式作為引數傳入函式作為返回值

1,arguments是一個比較特別的物件,每個函式中都有一個arguments,它接收函式傳入的引數,以陣列的形式存放在 arguments,可遍歷 //1,需求:求任意數的最大值 function getMax(){ var Max = arguments

Python的變數作用名稱空間和作用的區別This inspection detects shadowing names defined in outer scopes警告解決

Python的變數作用域: L(local)區域性作用域: 區域性變數:包含在def關鍵字定義的函式中,即在函式中定義的變數。每當函式被呼叫時都會建立一個新的區域性作用域。在函式內部的變數宣告,除非特別的使用global關鍵字宣告為其全域性變數,否則均預設為區域性變數。

python 的函數值傳遞作用(例子)

python legb1.python的函數格式: def FuncName([arg1,arg2,..]): func_suite def: def是函數的關鍵字 FuncName: 實際也是變量,它指向函數對象,在函數定義

1【C++】類&物件/建構函式/拷貝建構函式/操作符過載/解構函式

一、C++類 & 物件     C++ 在 C 語言的基礎上增加了面向物件程式設計,C++ 支援面向物件程式設計。類是 C++ 的核心特性,通常被稱為使用者定義的型別。     類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在

let const關鍵字定義變數作用

let 宣告的變數只能在它所在的程式碼中有效 { let a=10; var b=1; } console.log(a); console.log(b); for迴圈 中let變數 var a=[]; for(let i=0; i< 10; i++){

JS中的塊級作用,varletconst三者的區別

brush 語句 nbsp light 可見 undefine 函數 true 正常 1. 塊作用域{ } <script type="text/javascript"> { var a = 1; console.log

@EnableAutoConfigurationApplicationContext@Configuration註解@Bean註解以及配置自動掃描bean作用

EnableAutoConfiguration @EnableAutoConfiguration可以幫助SpringBoot應用將所有符合條件的@Configuration配置都載入到當前SpringBoot建立並使用的IoC容器。 詳解參加:SpringBoot之@EnableAu

Spring整理系列(11)——@Configuration註解@Bean註解以及配置自動掃描bean作用

1、@Configuration標註在類上,相當於把該類作為spring的xml配置檔案中的<beans>,作用為:配置spring容器(應用上下文) package com.test.spring.support.configuration; @Configuration pub

JS中最經典的全域性變數和區域性變數問題(1作用作用鏈 2變數宣告提前)

var a = 10; function test(){ a = 100; console.log(a); console.log(this.a); var a; console.log(a); } test(); 1、程式的執行結果為:100