函數的五種聲明體式格局
要領一:簽字函數
function f(parameter){
return undefined
}
函數都邑有一個返回值,不寫,默許返回undefined
。由於一個函數必需要有一個停止的語句
注重:consol.log()
永久返回undefined
,它打印什麼和返回的沒啥關聯。
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
要領二:簽字函數給一個參數
var x = function f(parameter){
return undefined
}
區分:
要領一:可在全局接見函數f
。
consol.log(f); // f(parameter){ return undefined }
要領二:只能在函數內部接見f
,在函數外部無法接見。
consol.log(f); // 報錯
要領三:匿名函數
var f = function(parameter){};
匿名函數必需給一個變量
要領四:window.Function
函數對象
new Funciton('x','y','return x+y')
要領五:箭頭函數
f = (x,y) => {return x+y;}
箭頭函數是匿名的,只能用變量去存儲。
假如只要一句語句,花括號和return
能夠一同去掉;
假如只要一個變量,可省略圓括號。
函數的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