js深入系列-函數

子程序

一個或者多個語句組成的完成特定任務的相對獨立的的一段代碼塊;
包括:

  • 函數: 有返回值
  • 方法: 在對象中
  • 過程: 沒有返回值
    在這裏插入圖片描述

數學中函數

定義域中每一項元素總會對應一個或者多個值域中的值。

-函數式編程
編程風格符合數學函數;

閉包與let

常見的問題

for(var i =0;i<6;i++){
	setTimeout(() => {
		console.log(i)
	})
}

解析:var 定義的變量是全局的沒有局部的定義域,所以輸出的i都是同一個i,i= 6時跳出循環,因此屬輸出6
上面的代碼將會輸出6個6,如何輸出0-5,可修改爲下面:

for(let i =0;i<6;i++){
	setTimeout(() => {
		console.log(i)
	})
}

// or

for ( var i = 0; i< 6; i ++){
	!function(){
		setTimeout(() => {
			console.log(i)
		})
	}()
}
// 使用let  或者立即執行函數可以輸出 0.1.2.3.4.5

解析:let 定義的變量只在{}內才能訪問到,形成了類似以閉包的效果;每次的i都在當前作用於內,不會被其他干擾;

this 的確定

在這裏插入圖片描述

函數與閉包、this

在這裏插入圖片描述
解析:

fn ()    =>  fn.call(undefined)    // 此時this指向window,window.length === 當前tab窗口數量 ;因此輸出3
arguments[0]()  =>   arguments[0].call(arguments)   => fn.call(arguments)   // 此時this指向arguments  ;arguments.length === 2;因此輸出2

tip:
window.length === 默認爲當前窗口的窗口數量
第二個是參數的長度

最後關於this

this是call的第一個參數
new 重新設計了this
箭頭函數不接受this

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章