JS 函数
发布日期:2021-05-14 16:20:42 浏览次数:20 分类:精选文章

本文共 2027 字,大约阅读时间需要 6 分钟。

JavaScript 函数与变量作用域

定义函数

绝对值函数

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

函数一旦执行 return 语句,函数将结束并返回结果。如果没有执行 return,函数将执行完毕后返回 undefined

匿名函数

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

function(x){...} 这是一个匿名函数,但可以通过赋值给变量 abs 进行调用。

调用函数

abs(10); // 返回 10
abs(-10); // 返回 10

JavaScript 可以传递任意个参数,也可以不传递参数。

参数问题

JS 可以传递多个参数,如 abs(5, 10),但函数只能处理第一个参数。如果想处理多个参数,可以使用 arguments 对象。

function abs(x) {
console.log("x:", x);
for (var i = 0; arguments.length; i++) {
console.log("arguments[" + i + "]:", arguments[i]);
}
if (x >= 0) {
return x;
} else {
return -x;
}
}

排除已定义参数

如果需要处理额外的参数,可以使用 rest 参数。

function aaa(a, b, c, ...rest) {
console.log(a + " > " + a);
console.log(b + " > " + b);
console.log("rest:", rest);
}

...rest 必须放在 function 参数的末尾。如果要检查是否有额外参数,需确保函数定义的参数后面有 ...rest

变量作用域

在 JS 中,var 定义的变量具有作用域。函数内定义的变量在函数体外不可用,即使在相同作用域中。使用 letconst 可以避免变量在块外重声明。

function qj() {
var x = 1;
x = x + 1;
}
// 在函数体外,x 不存在

同一函数内重复使用相同变量名,不会导致冲突。

function qj() {
var x = 1;
function qj2() {
var x = 'A';
console.log('inner' + x);
}
console.log('outer' + x);
qj2();
}

调用后输出为 outerundefined,说明内部函数会屏蔽外部变量。

全局变量

所有全局变量都会自动绑定到 window 对象上。

x = 1;
f = function() {
console.log(x);
}
f();
console.log(x); // 输出 1

全局变量会被 window 绑定到-window对象。

var a = 'x';
console.log(window.a); // 输出 x

如果全局作用域中存在相同变量,JS 会优先使用全局变量而非函数变量。

局部作用域

letconst 从 ES6 起可用,避免变量在块外重声明。

function aaa() {
for (let i = 0; i >= 100; i++) {
console.log("i > " + i);
}
console.log(i + 1); // 正常工作,因为 for 循环已声明 let i
}

在父级或钻紧作用域中,如果变量未声明,会抛出 ReferenceError

常量 (const)

在 ES6 中,const 可以定义不可变的常量。

var PI = 3.14;
console.log(PI); // 3.14
PI = 123;
console.log(PI); // 123

与此同时,const 也可用于定义常量。

const Bali = '一个未改变的值';
Bali = 'Bali.book'; // 变更不可能

const 可用于字符串、数值、对象等类型,但也可以重复声明表达式结果。

总结

JS 的函数定义方式多样,参数处理灵活,变量作用域有明确规则。理解这些概念 有助于编写 有效、可维护的代码。

上一篇:JS方法
下一篇:JS对象

发表评论

最新留言

很好
[***.229.124.182]2025年05月25日 03时51分25秒