方法一:具名函數函數
function f(parameter){ return undefined }
函數都會有一個返回值,不寫,默認返回undefined
。由於一個函數必需要有一個終止的語句
注意:consol.log()
永遠返回undefined
,它打印什麼和返回的沒啥關係。this
var a = 1,2 //報錯 var a = (1,2) //a 的值爲 2 var a = console.log(1); //a 的值是 undefined var a = (1, console.log(2)) //a 的值是 undefined
方法二:具名函數給一個參數code
var x = function f(parameter){ return undefined }
區別:
方法一:可在全局訪問函數f
。對象
consol.log(f); // f(parameter){ return undefined }
方法二:只能在函數內部訪問f
,在函數外部沒法訪問。ci
consol.log(f); // 報錯
方法三:匿名函數字符串
var f = function(parameter){};
匿名函數必須給一個變量it
方法四:window.Function
函數對象io
new Funciton('x','y','return x+y')
方法五:箭頭函數console
f = (x,y) => {return x+y;}
箭頭函數是匿名的,只能用變量去存儲。
若是隻有一句語句,花括號和return
能夠一塊兒去掉;
若是隻有一個變量,可省略圓括號。function
name
屬性函數有一個屬性————name
function f1(){} f1.name; //f,字符串 var f2 = function (){}; f2.name; //f2,字符串 var f3 = function f4(){}; f3.name; //f4,字符串 new Function('x','y','return x+y'); f3.name; //anonymous,字符串
函數是一段能夠反覆調用的代碼塊。
f(1,2) === f.call(undefined,1,2)
f.call()
纔是函數的真正調用,模擬下call()
的內部。
var f = {}; f.name = 'f'; f.params = ['x','y']; f.functionBody = 'console.log("fff")' f.call = function(){ return eval(f.functionBody); }; f.call(); //fff
this
和argument
f.call(undefined,1,2); //undefined就是this,[1,2]就是argument
call
的第一個參數能夠用this
獲得call
的第二個參數能夠用argument
獲得
function f(){ console.log(this); //this 是參數 1 } f.call(1); //Number 對象 1
function f(){ 'use strict'; //嚴格模式 console.log(this); //this 是參數 1 } f.call(1); //1,嚴格模式模式下參數是啥就打印啥
function f(){ console.log(this); //this 是參數 undefined,沒有就是 undefined } f.call(); //window,不是字符串;嚴格模式下會打印 undefined