JavaScript编程用法——JavaScript函数


在JavaScript中,函数本身也可以是一个变量,可以被赋值使用,函数定义的关键字,function,函数有显示函数和匿名函数。

调用匿名函数不加括号就是直接赋值整个函数内容而不是返回值

函数定义

源码

function js_func(value){ 

		console.log("func value = " + value);

		return "func test";
} 

function js_function_test(){ 

	var num =  6.626E-34;
	console.log("func return is " + js_func(num));

	var istruefunc = function(num) {
		if(num)
			return true;
		else
			return false;
	};
	
	console.log("func is " + istruefunc);	
}

执行结果
在这里插入图片描述

函数传参与返回值

JavaScript不会严格规定函数的传参,var包括的类型都能传,在函数内部判断参数有效性,JavaScript也不严格规定传参个数,可以传多也可以传少,甚至可以不传。传参按照顺序读取。

不传参,函数的参数为undefined,若传多余的参数且函数内没有对应取值,将会被过滤掉

源码

function js_func(value){ 

	console.log("func value = " + value);

	return "func test";
}

function js_function_value_test(){ 

	console.log("func return is " + js_func());

	console.log("func return is " + js_func("string",3.14,'A'));
}

执行结果
在这里插入图片描述

获取函数参数:arguments

该关键字在于获取函数传参变量。

源码

function js_func_argv(value){ 
	for (var i = 0; i < arguments.length; ++i) {
        console.log("func value is " +  arguments[i]); 
    }
}

function js_function_value_test(){ 
	js_func_argv();
	js_func_argv("string",3.14,'A');
}

执行结果
在这里插入图片描述

函数甚至在未定义传参的时候也可以获取值

源码

function js_func_argv_empty(){ 

	for (var i = 0; i < arguments.length; ++i) {
        console.log("func value is " +  arguments[i]); 
    }
}

function js_function_value_test(){ 
	js_func_argv_empty(49,3.14,"Test");
}

执行结果
在这里插入图片描述

获取函数定义外参数:rest

该关键字是获取函数定义外的参数,不包含已知函数,函数写法需要修改

源码

function js_func_argv_rest(isnum,strname,...rest){ 

	console.log("func value is " +  isnum); 
	console.log("func value is " +  strname); 

	for (var i = 0; i < rest.length; ++i) {
        console.log("func rest value is " +  rest[i]); 
    }
}

js_func_argv_rest(6,"StringTest","Test",3.14,'D');

执行结果
在这里插入图片描述

函数嵌套

在JavaScript中,由于函数也是一个变量,因此可以和C/C++一样进行嵌套逻辑处理

源码

function js_function_nested(){

	var simunber = 2;
	var testarray = ['A',"A value"];
	var stTest = {
		siindex: 1,
		strname: "ZX Test",
		strclass: "One",
	};	
	var showfunc = function(){
		console.log(simunber);
		console.log(testarray);
		console.log(stTest);
	};

    var testfunc = function() {
		showfunc();
	}

	testfunc();
}

执行结果
在这里插入图片描述

嵌套声明

JavaScript的函数嵌套声明不能像C++那样放置在函数任意位置,在JavaScript运行过程中,会将函数的声明置顶。

代码

function js_function_nested(){

	var simunber = 2;

	var testfuncnested = function() {
		console.log("num = " + simunber);
		var simunber = simunber + 4;
		console.log("func num = " + simunber);
	}	

	testfuncnested();

}

执行结果
在这里插入图片描述

函数的数据并未初始化。

JavaScript运行时会将变量的声明置顶变成如下函数

var testfuncnested = function() {
		var simunber = simunber + 4;

		console.log("num = " + simunber);
		console.log("func num = " + simunber);
	}	

由于作用域原理,函数会优先使用函数内部的变量作用域。simunber在函数testfuncnested被从新定义,没有被初始化,因此值为undefined,加法运算错误,输出结果为NaN。

正确的做法是声明一个名字不同的变量。

    var testfuncnested = function() {
		console.log("num = " + simunber);
		var funcnum = simunber + 4;
		console.log("func num = " + funcnum);
	}	

执行结果
在这里插入图片描述

嵌套函数

在JavaScript函数中,函数本身就是一个变量,把函数当变量传进函数,在函数里面应用该函数。

源码

	function show(addr,name, func) {
		return "Show: " + func(addr) + func(name);
	}

	function showstring(value) {
		return " value = " + value;
	}

	console.log(show("city","zxtest",showstring));	

执行结果
在这里插入图片描述

this变量

定义和C++一样,this指向当前对象,但JavaScript没有指针定义,因此this是一个特殊的关键字变量。

源码

	var zxTest = {
		index: 5,
		strname: "zxTest",

		showinfo:function(){
			console.log(" func index = " + this.index);
			console.log(" func name = " + this.strname);	
		},
		value: function () {
			this.showinfo();
			return 10 + this.index;
		}
	};

	console.log(" func value = " + zxTest.value());	

执行结果
在这里插入图片描述

数组方法

map方法

与容器的Map不同,该方法为全小写。存在于在数组array中的方法。为函数传入一组参数,并且返回一组结果,参数与结果一一对应。

	var arrayvalue = [1,9,25,49];

	console.log(arrayvalue.map(Math.sqrt));

执行结果
在这里插入图片描述

reduce方法

对数组的参数依次进行函数传参运算,一般用于累加或累乘。

源码

	var arrayvaluenum = [1, 3, 5, 7, 9];

	function sum(x,y) {
		return x + y;
	}

	console.log(arrayvaluenum.reduce(sum));

执行结果
在这里插入图片描述

sort方法

和C++一样,为排序算法,默认是以ASCII码进行排序

源码

	var arrayunit = ['D',"window",36,8,'b',"Obj"];
	var arraynum = [6,15,2,10,7,9,36];

	var retunit = arrayunit.sort();
	var retnum = arraynum.sort();

	console.log(retunit);
	console.log(retnum);

执行结果
在这里插入图片描述

字母或字符串以首字母的ASCII码进行排序。但数字排序比较特殊,JavaScript先将数字转换成string类型,再进行首字母ASCII码比较。

使用自定义比较器比较

要对数字进行比较,需要通过传入比较器进行修改比较规则。

源码

	var arraynum = [6,15,2,10,7,9,36];

	function cmp(x,y){
		return x > y;
	}

	var retnum = arraynum.sort(cmp);

	console.log(retnum);

执行结果
在这里插入图片描述

箭头函数

箭头函数实际就是简化的函数,通过箭头来表示函数。

源码

var cmp = (x,y) => x > y;	

	var abs = x => {
		if(x > 0)
			return x;
		else
			return -x;
	}

	var pi = () => 3.14;

	console.log(cmp(3,7));
	console.log(abs(-13));
	console.log(pi());

执行结果
在这里插入图片描述

关键字:call和apply

每个函数都有两个方法:call和apply,用于改变函数内this的指向,改变this指针的作用域。

源码

	var FuncTest = {
		name : "ZX Test",
		num  : 13,
		show : function (title,content){
			console.log("This name is " + this.name);   
			console.log("This num is " + this.num); 
			console.log("title is " + title); 
			console.log("content is " + content);  
		}
	}	

	var Testcall = {
		name : "Test Call"
	}

	var Testapply = {
		name : "Test apply",
		num  : 6,
	}	
	FuncTest.show("Test default","FuncValue");
	FuncTest.show.call(Testcall,"Test Value","Func call");
	FuncTest.show.apply(Testapply,["Test Value","Func apply"]);

执行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值