欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

函数的调用

程序员文章站 2022-03-17 12:15:14
...

函数的调用分为普通函数的调用,方法调用,构造函数的调用和间接调用

普通函数

普通函数分为命名函数和匿名函数

命名函数调用
function add() {
	// body...
}
add();
匿名函数调用

匿名函数的调用分为三种,使用一个变量保存匿名函数

var add = function () {
	// body...
};
add();

调用的时候直接加()-----自调

(function () {
	console.log(1);
})();

或者

(function () {
	console.log(1);
}());

或者随意酷炫一点,只要使得function不再是打头出现,console.log()也可以

!+-~function () {
	console.log(1);
}();
console.log(function () {
	return 1;
}());

使用匿名函数自执行方式,计算56-23的值

console.log((function(num1,num2){
	return num1-num2;
}(56,23)));
递归调用
function factorial(num) {
	if (num <= 1) return 1;
		return num * factorial(num - 1);
	return 5 * 4! = 5 * 4 * 3! =... 5 * 4 * 1!
}
console.log(factorial(5));
console.log(factorial(4));

当如果没有写入if (num <= 1) return 1;程序会出现大多递归导致报错

方法的调用

通过对象.方法调用

var operation = {
	add: function (num1, num2) {
	 		return num1 + num2;
	 	},
	subtract: function (num1, num2) {
	 		return num1 - num2;
	}
};
operation.add(1, 1);

对于合法的标识符可以不使用’‘单引号引起来,对于不合法的标识符例如@,则需要变成’@‘声明,在调用的时候需要不能像operation.add(1,2)这样的方式来调用,需要使用中括号的形式operation[’@’](1, 2)

 	var operation = {
	 	add: function (num1, num2) {
	 		return num1 + num2;
	 	},
	 	subtract: function (num1, num2) {
	 		return num1 - num2;
	 	},
	 	'@': function () {
	 		console.log('@');
	 	},
	 	key: function () {
	 		// body...
	 	}
	 };
	 console.log(operation.add(1, 2));
	 console.log(operation['@'](1, 2));
	 var key = 'add';
	 console.log(operation[key](1, 2));

对于事件来说,document会主动之前被绑定事件函数模拟事件的发生

	document.onclick = function () {
	 	console.log('你点击了文档!');
	 };
	 document.onclick();

例:现有一个矩形的盒子和按钮,盒子的右上角有一个表示关闭的x,当点击按钮和x号时,矩形的盒子会消失。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<title>方法的调用</title>
<style type="text/css">
    #box{position: relative; width: 100px; height: 100px; 
         background-color: red; margin: 10px auto;}
    #close{position: absolute; right: 0px; top: -4px; color: yellow;}
    #btn{display: block; width: 100px; margin: 0 auto;}
</style>
</head>
<body>
    <div id="box">
        <span id="close">X</span>
    </div>
    <button id="btn">关闭</button>
<script type="text/javascript">
    // 在此处补充代码   
	var box = document.getElementById('box');
	var closes = document.getElementById('close');
	var btn = document.getElementById('btn');
	btn.onclick=function(){
		box.style.display="none";
	}
	closes.onclick=function(){
		btn.onclick();
	}
</script>
</body>
</html>

构造函数的调用

一般使用大写字母来表示一个构造函数,实例化构造函数返回对象,构造函数必须通过new实例化调用。
用构造函数的方式分别定义对象和数组,并向其中添加一些内容

function Person(name){
	   this.name= name;
   }
   var person = new Person("xm");
   console.log(person);
   var arr = new Array(1,5,7,9);
   console.log(arr);

显示’xm’,[object Object]

function person(){
	return 'xm';
}
document.write(person());
document.write(new person());

函数的间接调用

每个函数都有call和apply方法
call和apply的唯一区别在于他们传参的方式上

var name = 'xm';
	 var person = {};
	 person.name = 'xh';
	 person.getName = function () {
	 	return this.name;
	 };
console.log(person.getName());
console.log(person.getName.call(window));
console.log(person.getName.apply(window));

输出显示xh xm xm
因为call()和apply()的第一个参数会改变this指向,将之前的this指向person改变成this指向了window,所以显示了xm

function add(num1, num2) {
		return num1 + num2;
}
console.log(add(1, 2));
var datas = [1, 2];
console.log(add.call(window, 1, 2));
console.log(add.apply(window, datas));

输出3 3 3
apply可以将接收到的数据传递进去,并将结果显示出来

相关标签: js 函数的调用