主要总结:
函数值是一个带有参数的代码块,可以根据需要任意运行(调用)
调用一个函数,我们会向它的形参传送实参。多余的形参会被转换为undefined。函数可以通过
return
语句向调用者返回结果。如果从来没有执行过return
语句,则默认返回undefined
。一种好的编程实践是:在为函数做注释时,应当说明这个函数做些什么,而不是它如何做。
在编写处理对象的函数时,必须做出决定:是希望这个函数修改其对象实参的的属性,还是返回新对象。
JavaScript变量要么具有全局作用域,要么具有函数(局部)作用域。
JavaScript有两个属性:
length
和prototype
。prototype
对象用于存储一些属性,可供该函数创建的所有对象访问,实际上就是允许定义新类型。我们可以向函数提供更多属性。有的函数可以作为对象的属性,有的函数可以通过
this
引用表达式引用对象的其他属性,这种函数称为方法。方法时OOP的核心概念。高阶函数就是以形参或者返回函数的函数,他们可以简化集中程序设计任务,可以减少脚本中的共同代码数量。
函数可以用函数声明定义,可以直接使用函数表达式定义,也可以通过变量或对象属性指定函数表达式定义。函数声明虽然方便,却不能在某些上下文中使用,其作用域规则不够直观,会模糊一个事实:函数就是值,与其他值没有区别
练习:
编写一个函数,返回两个实参的最大值。
function large(x,y) {
return x>y ? x : y;
};
编写一个函数,返回两个实参的平均值。
function mean(m1,m2) {
return (m1+m2)/mean.length
};
编写一个函数,返回一个数组中所有项目的平均值。
function arrMean(arr) {
var sum = 0;
for (var i=0;i<arr.length;i++) {
sum += arr[i];
}
return sum/arr.length;
};
解释运行以下脚本结果,回答中应当涉及"结合律"一词
var cubeOf = function (x) {
return x*x*x;
};
alert("魔方中共有:"+cubeOf(3)-1+" 个立方体");
我们分析一下alert
中的语句,从左至右,第一个是字符串,后接一个加号,则说明此加号是做字符串连接符使用。继续往右,函数调用优先级是比加号高的,所以先执行函数调用,返回一个数字,再相加。此时应该是"....:27",注意接下来,一对字符串与一个类型为数值的数字做减号运算得到什么?我们知道,这其实是隐式转换数值的方法之一,所以JS会尝试把之前所以的字符串转换成数值类型来与1
进行计算,不信试一下alert("15"-1)
。但是失败了,所以会转换为NaN
,注意,此时数值类型是number
,alert(typeof NaN)
,然后NaN与后面字符串继续相加,又转换成了字符串类型。最后得到一个类型为字符串的字符串。
编写一个函数,接受两个数字,并返回介于这两个值之间的一个随机数
function random(n1,n2) {
var randomArr = [];
if (n1>n2) {
for (var i=n2+1;i<n1;i++) {
randomArr.push(i);
}
} else {
for (var j=n1+1;j<n2;j++) {
randomArr.push(j);
}
}
return randomArr[[Math.floor(Math.random()*randomArr.length)+1]]
};
-
编写一个函数接受三个值,并返回其中值。三个数值的中值就是大于或等于另两值的一个,小于或等于剩下的那个值。(尼玛这形容)
中值也称中位数,即数据按升序或者降序排列,假如有
n
个数据,当n
为偶数时,中位数为第n/2
位数和第(n+2)/2
位数的平均数;如果n
为奇数,那么中位数为第(n+1)/2
位数的值。
function midValue(n1,n2,n3) { var arr = [n1,n2,n3]; arr.sort(function (a,b) {return a-b}); // 升序排序 return arr[((arr.length+1)/2)-1]; // 获得奇数位中位数,但由于数组计算方式所以-1 };
编写一个函数,返回一个给定数组中0的个数。
function numberOfZeros(arr) {
var counter = 0;
for (var i=0;i<arr.length;i++) {
if (arr[i]===0) {
counter++;
}
}
return counter;
};
编写一个函数,返回一个给定字符在字符串中的出现次数。
function strNum(str,x) {
var arr = String(str).split("");
var num = 0;
alert(arr)
for (var i=0;i<arr.length;i++) {
if (arr[i]===x) {
num++;
}
}
return num;
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。