對於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 ...