JavaScript 之 核心語法 [ 函數和做用域 ]

函數

描述

  • 表示定義一段JavaScript代碼,而且可重複使用

函數的定義

  • 函數聲明方式
  • 字面量表達方式

函數聲明方式

語法

function 函數名稱( )"小括號不可省去" {
      函數體
}
/* 函數聲明方式 */
function fun() {
    /* 在定義函數時,函數體中的內容不會被執行 */
    console.log( '啞吼吼' );
}
/*
    調用函數 - 使用函數名稱
     * 調用函數的時候會執行函數體中的內容
 */
fun();

字面量方式

語法

var 函數名 = function( )"小括號不可省去" {
      函數體
}
/* 字面量方式 */
var fn = function() {
    /* 在定義函數時,函數體中的內容不會被執行 */
    console.log( '吼啞啞' );
}
/*
    調用函數 - 使用函數名稱
     * 調用函數的時候會執行函數體中的內容
 */
fn();

函數的參數

描述

  • 表示定義函數時在函數名稱中使用的定義( 小括號中的 )
  • 參數只能在函數中使用

參數分爲

  • 形參 - 定義函數時使用的參數
  • 實參 - 調用函數時使用的參數
/* 定義函數 - 形參 */
function fun( a, b ){
    /*
        在參數中:
        形參與實參個數相對應
        * 形參的個數多於實參個數時,沒有對應實參的形參會顯示 undefined
        * 實參的個數多於形參個數時,沒有對應形參的實參會沒有顯示
     */
    console.log( a, b );// 顯示效果:a=1,b=2
}
/* 調用函數 - 實參 */
fun( 1, 2 );

return語句

  • 表示函數在調用結束後具備一個返回值
  • return語句並非必要的
  • return語句通常會被編寫在函數體的最後面函數

    • 若是不在函數體的最後面,return語句以後的代碼將不會被執行
  • return語句帶有值會顯示值,若是沒有值會顯示 undefined
function fun(){
    console.log( '啊哈哈' );
    return 100;
}
/* 調用函數 */
fun();// 顯示 啊哈哈
/* 將函數的返回值 賦值到變量中 */
var funs = fun();
/* 顯示返回值 */
console.log( funs );// 顯示 100

/* return語句不在函數體最後 */
function fn(){
    console.log( '啊哈哈' );
    return;
    console.log( '呀吼吼吼' );
}
fn();// 顯示 啊哈哈
var fns = fn();
console.log( fns );// 顯示 undefined

做用域

  • 變量和函數都具備做用域,用於顯示可被顯示訪問的區域
  • 做用域分爲(變量和函數同樣):全局做用域和局部做用域(函數做用域)code

    • 全局做用域:表示在函數以外的全部區域
    • 局部做用域(函數做用域):表示在函數以內的區域

全局變量和局部變量

全局變量

  • 是指在全局做用域中定義的變量
  • 該變量能夠同時做用在全局做用域和局部做用域(函數做用域)

局部變量

  • 是指在函數內的變量
  • 局部變量只能做用在當前函數中
/* 做用在全局做用域 */
var num = 100;
console.log( num );
/* 同時做用在局部做用域 */
function fun() {
    console.log( num );
}
fun();

/* 定義全局變量 */
var num1 = 100;
function fn() {
    console.log( num1 );
    /* 定義局部變量 - 只能做用於當前函數 */
    var num2 = 100;
    console.log( num2 );
}
fn();
/* 在全局做用域調用局部變量會報錯 */
console.log( num2 );// 顯示 num2 is not define

函數和內部函數

函數(全局函數)

  • 是指在全局做用域中定義的函數
  • 該函數能夠同時做用在全局做用域和局部做用域(函數做用域)

內部函數(私有函數)

  • 是指在函數內的函數
  • 內部函數只能做用在當前函數中
/* 定義全局函數 */
function fun(){
    console.log( '啊哈哈' );
    /* 定義內部函數 */
    function fu(){
        console.log( '呀吼吼' );
    }
    fu();
}
/* 全局做用域 */
fun();
/* 在全局做用域調用內部函數會報錯 */
fu();// 顯示 fu is not defined

/* 定義另外一個全局函數 */
function fn(){
    /* 函數中能夠調用全局函數 */
    fun();
    /* 沒法調用另外一個函數的內部函數 - 會報錯 */
    fu();// 顯示 fu is not defined
}
fn();

聲明提早

  • 表示在使用變量時,先調用變量,在對變量進行定義
  • 語法不會報錯,會顯示 undefined
/* 先調用未定義的變量,在隨後定義,語法不會報錯,會顯示 undefined */
console.log( s );//顯示結果:undefined
var s ;//調用後定義
/* 從新定義並賦值 */
var s = 100;
/* 顯示效果 */
console.log( s );// 100

按值傳遞

  • 是指將函數實參的變量值賦值給函數形參,使實參和輸出結果同樣
  • 在對局部變量進行修改時,不會修改全局變量
/* 全局變量 */
var s = 100;
function f ( s ) {
    s++;// 修改局部變量
    return s;// 返回數值
}
/* 定義變量顯示返回值 */
var ss = f( s );
/* 顯示函數輸出效果 */
console.log( ss );// 101
/* 顯示全局變量 */
console.log( s );// 100
相關文章
相關標籤/搜索