标签:个数 概念 ESS state 函数参数 int() 引用 UNC 接受
js中函数一般定义如下:
function functionName(arg0,arg1,arg2,...,argN) {
statements;
}
其中functionName是函数名,arg0,…argsN是参数,没有具体类型,可以接受任何类型的参数,例如Boolean,Number,String,Object等。function可以有返回值(返回值可以返回任何类型),也可以没有返回值
来看一个function示例:
function printHello(message) {
alert(message);
}
printHello("helloworld");
将会弹出 helloworld
带返回值的函数
function sum(num1,num2) {
return num1 + num2;
}
alert(sum(2,6));
输出8
这样来看,其实和java中也差别不大,但是关键的是在js中也允许这样的代码存在
alert(sum(2,6));
var res = sum(1);
alert(sum(1,2,3));
var res2 = sum;
alert(sum());
这样一来,和java中相差就很大了。可以看到我们 定义函数是两个参数,但是调用却可以是0个,1个,甚至3个参数。并且函数名还可以赋值给其他变量。这是怎么回事呢?下面讲解。
3 javascript中function注意事项
1 javascript中function的本质
javascript中函数本质上是一个对象,每个函数都是Function的实例,都与其他对象一样有属性和方法。由于函数是对象,因此函数名实际上是指向函数的一个指针,函数名不会与具体的某个函数绑定。
理解以上概念对我们理解javascript中函数非常有用,这些解释了以下代码为什么会执行结果相同
var res2 = sum;
res2(1,2);
sum(1,2)
以上代码结果均是3
个人觉得javascript中函数与java中的主要区别如下:
js中函数是一个对象,函数名是一个指针。java中函数是对象的一个方法,依附于对象,不能独立存在。
java中就不说了,很好理解。js中刚刚已经介绍过了,为了理解js中函数是一个对象,我们可以这样定义sum函数:
var sum = new Function("num1","num2","return num1 + num2");
var sum1 = function (num1,num2) {
return num1 + num2;
};
alert(sum(1,3));
alert(sum1(1,3)) ;
以上两个结果均输出4,可以看到,js中函数确实是一个对象。函数名仅仅是一个指向该函数的指针。
js中函数没有重载,参数没有类型校验,调用可传递0到N个参数
js中函数是一个对象,函数名是一个指针,因此对象没法重载,定义多个相同名字的函数等于将该对象指向多个函数,最终肯定会以最后的定义为准。
function print() {
return "print1";
}
function print(message) {
return "print2";
}
alert(print());
alert(print("ppp"));
结果都是输出print2,可见最终print2函数都是返回print2。
另外,js中可以把没有返回值的函数赋值给某个结果变量,如下:
function noReturn() {
var i = 0;
}
var res = noReturn();
//输出 undefined
alert(res);
输出结果是undefined,如果一个函数没有返回值,被赋值时,默认返回undefined
js中函数内部有两个特殊对象:arguments,this
我们知道js中函数可以传递0到N个参数,那这是怎么回事呢?原因是js总函数的参数是用一个数组来表示的,这个数组就是arguments数组,不论传递的多少个参数,函数始终接受到的参数都是这个数组。可以用数组的形式来访问函数参数。如下:
var sum1 = function (num1,num2) {
//arguments length:2 1 3
console.log("arguments length:" + arguments.length + " " + arguments[0] + " " + arguments[1]);
return num1 + num2;
};
alert(sum1(1,3));
当调用时,我们可以看到控制台输出如下结果:
arguments length:2 1 3
this的行为与java中类似,它引用的是函数执行的环境对象–也可以说是this值(当在网页全局作用域中调用函数时,this对象引用的是window对象)。请参考下面例子。
window.color = "red";
//创建一个对象o 指明具有color属性
var o = {color:"blue"};
function sayColor() {
console.log(this.color);
}
//red
sayColor();
o.saycolor = sayColor;
//blue
o.saycolor();
可以看到,调用sayColor()是,当前this对象是window对象,当把sayColor赋值给o时,后面this对象指代的就是o对象了。
标签:个数 概念 ESS state 函数参数 int() 引用 UNC 接受
原文地址:https://www.cnblogs.com/zl1234/p/9944312.html