JavaScript函数注意事项1
- JS函数可以传入任意个参数而不影响调用,传入参数少也没有问题,一般会返回NaN。
- 在进行传入参数的判断的时候可以借助arguments来进行判断。
例如:
function foo(x) {
alert(x); // 10
for (var i=0; i<arguments.length; i++) {
alert(arguments[i]); // 10, 20, 30
}
}
foo(10, 20, 30);
在实际应用中arguments经常用于判断参数的个数。
- rest参数可以取得和arguments相类似的效果。
function foo(a, b, ...rest)
{
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
rest参数只能写在最后,前面用…标识,从运行结果可知,传入的参数先绑定a、b,多余的参数以数组形式交给变量rest,所以,不再需要arguments我们就获取了全部参数。
- 全局作用域:不在任何函数内定义的变量具有全局作用域,除了自身的变量访问也可以用window.*形式访问,JS默认的全局作用域对象为window。
'use strict';
function foo() {
alert('foo');
}
foo(); // 直接调用foo()
window.foo(); // 通过window.foo()调用
为了避免这种情况出现,一般都会利用名字空间
var MySpace = {};
//其他变量
MySpace.age = function()
{
return 18;
}
- 和C++不同的是在for循环等语句块中是无法定义具有局部作用域的变量。
'use strict';
function foo() {
for (var i=0; i<100; i++) {
//
}
i += 100; // 仍然可以引用变量i
}
为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量:
'use strict';
function foo() {
var sum = 0;
for (let i=0; i<100; i++) {
sum += i;
}
i += 1; // SyntaxError
}