《javascript权威指南第五版》函数/方法

本文深入探讨JavaScript函数的概念,包括定义、调用方式、参数处理及特殊方法等。介绍如何使用内函数、函数字面量和可变参数列表,并展示函数作为一等公民的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

javascript权威指南第五版 函数
一个函数是可以被不断调用,运行的JavaScript代码块。
一个被对象调用的函数成为方法

定义和调用函数
一个函数有:函数名,一个或多个参数名和用大括号组织起来的语句

定义函数的例子:
//返回undefined

function print(msg) {
document.write(msg, "<br>");
}

// 计算并返回
function distance(x1, y1, x2, y2) {
var dx = x2 - x1;
var dy = y2 - y1;
return Math.sqrt(dx*dx + dy*dy);
}

// 递归
function factorial(x) {
if (x <= 1)
return 1;
return x * factorial(x-1);
}

当函数定义后,可以用()操作符来调用

print("The probability of that is: " + factorial(5)/factorial(13));

8.1.1 内函数
Javascript可以内置函数

function hypotenuse(a, b) {
function square(x) { return x*x; }
return Math.sqrt(square(a) + square(b));
}


[color=blue]因为函数和类一样都是一等公民,Scala也允许有内函数[/color]

8.1.2 Function Literals
Javascript允许函数定义为:function literals.
function f(x) { return x*x; }              // function statement
var f = function(x) { return x*x; }; // function literal


[color=blue]同样Scala也有这个特性[/color]

8.2 函数参数
Javscript可以把函数当成参数进行传递。因为函数是松类型(loosely typed),所以可以传递任何类型的参数值给任何函数。

可选参数
如果传入的参数数量少于需要的数量,那么剩下的参数值都为undefined
如:定义函数拷贝,如果参数a没有传入那么创建一个空数组
function copyPropertyNamesToArray(o, /* optional */ a) {
if (!a) a = []; // If undefined or null, use a blank array
for(var property in o) a.push(property);
return a;
}


调用该函数:
var a = copyPropertyNamesToArray(o); // 将o的值拷贝给新的数组
copyPropertyNamesToArray(p,a); // 将p的值拷贝给数组a


8.2.2 可变参数列表:参数对象
Javascript可以侦测函数传入参数的数量
function f(x, y, z)
{
// 访问arguments对象判断读入的参数长度
if (arguments.length != 3) {
throw new Error("function f called with " + arguments.length +
"arguments, but it expects 3 arguments.");
}
// Now do the actual function...
}


Javascript把传入的参数都放在可变的对象arguments中,因此可以传入不定长的参数列表
function max(/* ... */)
{
var m = Number.NEGATIVE_INFINITY;
// 循环便利参数
looking for, and
// 记录最大的值
for(var i = 0; i < arguments.length; i++)
if (arguments[i] > m) m = arguments[i];
// 返回最大值
return m;
}

var largest = max(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6);



Javascript不是强类型定义,如果需要确定的类型参数,可以使用类似的判断:

if ((a instanceof Array) ||                         // if array
(a && typeof a == "object" && "length" in a)) { // or array like



8.3 函数作为数值
Javascript中可以将函数当作数在传递,存储和使用
比如定义一个函数:
function square(x) { return x*x; }

然后可以:
var a = square(4);  // a存了16
var b = square; // b存储了square这个方法!
var c = b(5); // c存了25


8.4 函数作为方法
当函数在对象中被调用的时候成为方法
var calculator = {  // 定义一个对象
operand1: 1,
operand2: 1,
compute: function() {
this.result = this.operand1 + this.operand2;
}
};
calculator.compute(); // 调用方法compute()
print(calculator.result); // 打印结果



8.6.4 ECMAScript有两个特殊的方法call()和apply()
假设有对象o和函数f
f.call(o, 1, 2);

就等同于
o.m = f;
o.m(1,2);
delete o.m;


appy()和call很类似,只是要用数组传值
f.apply(o, [1,2]);
内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值