js函數定義和使用


js函數的聲明

函數是一段可以反復調用的代碼塊。

JavaScript聲明一個函數可用兩種方法

第一種方法使用function命令。function命令后面是函數名,函數名后面是一對圓括號,里面是傳入函數的參數。函數體放在大括號里面大括號后面不用加分號

function print(s)

{

      console.log(s);

}

上面的代碼命名了一個print函數,以后使用print()這種形式,就可以調用相應的代碼。

第二種采用變量賦值的寫法。

var print = function(s) {

      console.log(s);

};

這種寫法將一個匿名函數賦值給變量。匿名函數又稱函數表達式,因為賦值語句的等號右側只能放表達式。采用函數表達式聲明函數時,function命令后面不帶有函數名需要在語句的結尾加上分號,表示語句結束。

js函數的調用

調用函數時,要使用圓括號運算符。圓括號之中,可以加入函數的參數。

函數體內部的return語句,表示返回,直接返回后面的表達式的值,即使return語句后還有其他語句,也不會得到執行。

return語句不是必需的,如果沒有的話,該函數就不返回任何值,或者說返回undefined

可以把函數賦值給變量和對象的屬性,也可以當作參數傳入其他函數,或者作為函數的結果返回。

根據ECMAScript的規范,不得在非函數的代碼塊中聲明函數,最常見的情況就是iftry語句。

函數的name屬性返回緊跟在function關鍵字之后的那個函數名。length屬性返回函數預期傳入的參數個數,即函數定義之中的參數個數。函數的toString方法返回函數的源碼。

js函數作用域

作用域是指變量存在的范圍。

Javascript只有兩種作用域:

一種是全局作用域,變量在整個程序中一直存在,所有地方都可以讀取;

另一種是函數作用域,變量只在函數內部存在。

在函數外部聲明的變量稱為全局變量,它可以在函數內部讀取。在函數內部定義的變量,外部無法讀取,稱為局部變量。函數內部定義的變量,會在該作用域內覆蓋同名全局變量。

注意,對於var命令來說,局部變量只能在函數內部聲明,在其他區塊中聲明,一律都是全局變量。

if (true)

{

  var x = 5;

}

console.log(x);  // 5

上面代碼中,雖然變量x在條件判斷區塊之中聲明,但仍然是一個全局變量,可以在區塊之外讀取。

函數作用域內部用var命令聲明的變量,不管在什么位置,變量聲明都會被提升到函數體的頭部。

函數執行時所在的作用域,是定義時的作用域,而不是調用時所在的作用域。

'use strict';

var a=100;

function m( )

{

    return a;  

}

function n( )

{

    var a='abc';

    return m( );

}

console.log('a='+m( ));//a=100

console.log('a='+n( ));//a=100

函數體內部聲明的函數,作用域綁定函數體內部。如下代碼中,函數A內部聲明了一個函數ff的作用域綁定A。當在A外部取出f執行時,變量a指向的是A內部的a,而不是A外部的a

'use strict';

var a="外部變量";

function A( )

{

    var a="內部變量";

    function f()

    {

      return "a="+a;

    }

    return f;

}

var foo=A( );

console.log( foo( ) ); //a=內部變量

js函數的參數

函數運行時提供的外部數據叫參數,Javascript允許省略參數。

如果函數參數是數值、字符串、布爾值,那么傳遞方式是傳值傳遞,在函數體內修改參數值,不會影響到函數外部。

如果函數參數是數組、對象、其他函數),那么傳遞方式是傳址傳遞,在函數內部修改參數,將會影響到原始值。

函數內部的arguments對象包含了函數運行時的所有參數,arguments[0]就是第一個參數,arguments[1]就是第二個參數,以此類推。arguments對象的length屬性可以判斷函數調用時到底帶幾個參數。嚴格模式下,arguments對象是一個只讀對象,修改它是無效的,但不會報錯。

'use strict';

var f = function(one)

{

  console.log(f.length);//1

  console.log(arguments.length);//2

  console.log(arguments[0]);//1

  console.log(arguments[1]);//2

  console.log(arguments[2]);//undefined

}

f(1, 2);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM