function(形參(可以省略)){
函數體(程式碼)
}
//當我們定義好函數,並在頁面中重新整理的時候,會發現這段程式碼並沒有被執行。
//因為函數定義好後,是不會自動執行的,需要我們進行呼叫。
() //直接呼叫 (也可用事件去呼叫)
(function(){
console.log('匿名函數')
})()
匿名函數:宣告較少,沒有複用價值(匿名自執行函數不能傳參)
function 函數名(形參,形參...(可以省略)){
函數體(程式碼)
}函數名() //呼叫
//第一種
sayHello() //呼叫
function sayHello(){
console.log('hello')
}
// 第二種
var sayHi=function(){
console.log('hi')
}
sayHi() //呼叫
幾名函數的兩種宣告,呼叫速度來說對應的第一種更快
function 和 var 在與編譯階段就會宣告!!!
var 關鍵詞修飾的變數在預編譯是不會賦值的!!!
var 函數名 = new Function(形參,形參1,'函數體')
var sayBye = new Function(‘ console.log("bye")’)
sayBye() //呼叫
var sayBye = new Function('username',
'console.log("bye bye!!"+username)') //傳參
sayBye('李四')
1.他會宣告對應的function和var關鍵詞修飾的變數(開闢記憶體的操作)
2.對應的function的記憶體空間開闢後它會將對應的程式碼塊放到其中 等待呼叫
3.var 修飾的關鍵詞 只會開闢一個空間 並不會進行賦值(預設給它一個undefined的值)
retrun 返回對應的數值 他是在函數內容進行資料返回的(當你呼叫了return操作後,後面的內容不會再執行)
function sum(a,b){
return a+b
console.log('不會執行的程式碼')
}
console.log('sum(1,2)') // 返回對應的1+2的值
如果沒有return關鍵詞 返回的一個undefined的值
function sayHi(){
console.log('hi')
}
console.log(sayHi()) // undefined
return的作用:
1.把對應的開闢的function記憶體裡面的程式碼塊丟給方法棧(執行棧)去執行
2.執行棧就會自動執行對應的方法,執行完返回對應的結果
3.當前結果返回完畢以後對應的執行棧裡面的記憶體空間要進行回收(GC)將這個記憶體空間銷燬
分為區域性作用域(函數作用域)(在一個函數內宣告 或者是在一段程式碼塊內宣告的 他的作用範圍就是當前的程式碼塊)(裡面的可以呼叫外面的,但外面的不能呼叫裡面的) if和switch程式碼塊不包含對應的區域性作用域
全域性作用域(在對應的全域性宣告,作用範圍是全域性的)
當前的作用域內沒有找到對應的變數就會向上去尋找,而這個過程構成的鏈式結構稱為作用域鏈
var a = 20
function fn(){
console.log(a);//undefined 沒有var關鍵詞就20
var a = 10
if(10>9){
console.log(a);//10 沒有var關鍵詞就10
var a = 30
if(5>4){
console.log(a);//30 沒有var關鍵詞就30
var a = 40
if(a>10){
console.log(a);//40
}
}
}
}
fn()
arguments是一個偽陣列(有部分的陣列特性)(可以通過length對應的長度[]下標來存取裡面的元素)
function sum(){ //不清楚引數個數(無參)
// arguments 可以接收裡面所有的引數
//獲取裡面傳遞的所有的引數 arguments 長度length
//下標索引是從0開始的
var result = 0
//遍歷對應的arguments裡面的所有的引數
for(var i=0;i<arguments.length;i++){
result += arguments[i] //取出裡面的引數進行求和
}
return result
}
所有的函數都具備arguments(物件)
注意事項
函數的抽取(抽取冗餘程式碼)
1.獲取對應的標籤(通過id獲取)
document.getElementById('id的屬性')
2.input框的值獲取value屬性
document.getElementById('input框的id').value
3.點選事件onclick
element.onclick = function(){
//相關操作
}
//通過輸入框輸入數值判斷對應的奇偶並列印
<input id="number" type="text">
<button id="btn">判斷奇偶</button>
<script>
function handlerClick(){
//拿到input框裡面的內容 獲取到input框
var inputValue = document.getElementById('number').value //string型別
// console.log(typeof inputValue); 如果是+法操作必須要先轉型別
//判斷奇偶的操作
if(inputValue%2==0){
console.log('當前為偶數');
}else{
console.log('當前為奇數');
}
}
//首先需要點選按鈕 獲取按鍵 加點選事件
//事件觸發自動呼叫對應的函數 (事件驅動)
document.getElementById('btn').onclick = handlerClick
</script>
遞迴可以完成所有迴圈做的事情(但遞迴的效率極低 一般不使用(檔案遍歷 選單遍歷 深拷貝使用多))
2 4 6 8 10 第100位的值是什麼
function fn(n){//一般情況下都有引數 n表示位數
if(n==1){//沒規律的(一般在前面或後面)
return 2 //返回具體的值
}else{//有規律的
return fn(n-1)+2 //返回對應的規律的公式 fn(n-1)當成值來看
}
}console.log(fn(100))
擴:bfs廣度優先搜尋 dfs深度優先搜尋 (遞迴思想)