JS函式詳解

2022-08-23 04:42:11 字數 3303 閱讀 5650

對於js來說,我們可以把函式理解為任意一段**放在乙個盒子裡,在我們想要讓這段**執行的時候,直接執行這個盒子裡的**就行。專業一點來講:js函式就是由事件驅動的可執行課重複只用的**塊。
宣告式
function fn() 

//這個function就宣告了乙個名為fn的函式

匿名函式(分為兩種情況)
// 賦值式的原理和我們使用var關鍵字是乙個道理

// 首先我們用乙個var定義乙個變數,把乙個函式當做值直接賦值就行了

var fn = function()

// var定義乙個fn的變數 然後函式function()賦值給fn

//匿名函式自執行:宣告後不需要呼叫就直接執行

;(function())();

建構函式式
var object = new object();

//這裡是js語言自帶的建構函式

// 可以呼叫

fn()

// 宣告式函式

function fn()

// 可以呼叫 fn函式

fn()

// 會報錯 

fn()

// 賦值式函式

var fn = function()

// 可以呼叫

在定義函式的時候我們都需要使用到(),而這個()就是存放引數的地方,引數分為形參和實參
// 宣告式

function fn(形參)

fn(實參);

// 賦值式

var fn = function(形參)

fn(實參)

形參

// 書寫乙個引數

function fn(num)

var fn1 = function(num)

// 書寫兩個引數

function fun(num1, num2)

var fun1 = function(num1, num2)

實參

function fn(num1, num2)

//這樣在fn函式中呼叫num1和num2時,他們的值就是num1=100,num2=200;

// 如果引數沒有一一對應那麼函式呼叫的時候就會出現undefined

返回值

function fn(num1, num2)

var res = fn(100, 200);

console.log(res);//結果為300

封裝**,使**更加簡潔

復用,在重複功能的時候直接呼叫就好

**執行時機,隨時可以在我們想要執行的時候執行

js是乙個解釋語言,在所有**執行前都會進行乙個預解析
函式提公升(整體提公升)
// 在**執行前這個函式整體已經被提公升到**的最前面

fn();

function fn()

變數提公升(區域性提公升)
console.log(num);//undefined

var num = 10;

// 在**執行之前,這個變數被提公升到**最前面,但是並未被賦值,所以列印的時候是undefined

全域性作用域
// 在頁面任何乙個地方都可以使用

var num1 = 100;

var num2 = 200;

區域性作用域
function fn()

// 區域性作用域的作用範圍只能在函式中使用,所以這裡列印is no defined

訪問規則

var a = 1;

function poo()

foo();

}poo();

function fn()

console.log(num);//無法找到num

賦值規則

function fn()

console.log(num);//這裡的num變成了偽全域性變數,可以訪問到

總結
每當乙個函式建立時,作用域鏈也被建立出來了,作用域鏈查詢過程:在js中我們呼叫一條資料時,會先在當前作用域進行查詢,如果找不到,就從向上找父作用域的資料,還找不到就接著向上,一直找到全域性作用域(window物件),window都找不到就報錯。

js函式詳解

函式 概述 函式的宣告 函式的重複宣告 圓括號運算子,return語句和遞迴 第一等公民 函式名的提公升 函式的屬性和方法 name屬性 length屬性 tostring 函式的作用域 定義 函式內部的變數提公升 函式本身的作用域 概述 函式的宣告 function命令,function命令宣告的...

j s函式詳解(2)

函式宣告 function fn 被宣告的函式不會直接執行,他們被儲存供稍後使用,被呼叫時執行 函式表示式 var x function a,b 在變數中儲存函式表示式後,此變數可用作函式 var x function a,b var z x 2,3 這個函式實際上是乙個匿名函式,沒有函式名稱的函式...

js建構函式詳解

常用的建構函式 例如 function student name,age,score var pyq newstudent pyq 18 0 pyq.exam 我叫pyq今年18歲這次考了0分1 var pyq 建立了乙個繼承自 student.prototype 的新物件。2 pyq.proto ...